Присоединение элементов в списке, пока не будет найден определенный элемент, пропустите его и добавьте остальные - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть список, который содержит данные из определенных журналов, где каждая строка журнала записывается как новый элемент, а также \n (new line), когда он завершен и продолжается снова.

Моя идея заключается в том, чтобы добавить все элементы до тех пор, пока \ n не будет найден в списке, добавить их в одну строку и отправить в другой список и продолжить процесс до конца.

Пример:

list1 = ['\ tat ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait (собственный метод) \ n', '\ tat sun.nio.ch.EPollArrayWrapper.poll (EPollArrayWrapper.java: 269) \ n ',' \ tat sun.nio.ch.EPollSelectorImpl.doSelect (EPollSelectorImpl.java:79) \ n ',' \ tat sun.nio.ch.Se lectorImpl.lockAndDoSelect (SelectorImpl.java:86) \ n ',' \ t-locked <0x0012550080d3 fe80> (a io.netty.channel.nio.SelectedSelectionKeySet) \ n ',' \ t-locked <0x0445000 '\ n', '\ n', '\ tat TWOTWOTWO.nio.ch.EPollArrayWrapper.epollWait (собственный метод) \ n',' \ tat sun.nio.ch.EPollArrayWrapper.poll (EPollArrayWrapper.java:269) \ n ',' \ ta t sun.nio.ch.EPollSelectorImpl.doSelect (EPollSelectorImpl.java:79) \ n ','\ tat sun .nio.ch.SelectorImpl.lockAndDoSelect (SelectorImpl.java:86) \ n ',' \ t- locked <0x00 00000085d3fez0> (a io.netty.channel.nio.SelectedSelectionKeySet) \ n ',' \ t- заблокировано <0x0000000080d40f80>, '\ n']

Я хочу добавить элементы из

`'\ tat ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait (Собственный метод) \ n ',' \ tat sun.nio.ch.EPollArrayWrapper.poll (EPollArrayWrapper.java:269) \ n ',' \ tat sun.nio.ch.EPollSelectorImpl.doSelect (EPollSelectorImpl.java:79) \ n ',' \ tat sun.nio.ch.Se lectorImpl.lockAndDoSelect (SelectorImpl.java:86) \ n ',' \ t-locked <0x0012550080d3 fe80> (a io.netty.channel.nio.SelectedSelectionKeySet) \ n ',' \ t-locked <0x0445000 '\ n' </p>

в одну строку и отправить ее в другой список, пропустите \nэлемент и снова добавьте его из следующего элемента, пока не будет найден следующий \n и так далее.Является ли это возможным?Я попробовал описанный ниже способ, но весь код добавляется.

Я пытаюсь проанализировать некоторые журналы, которые приходят к нам и застряли здесь.

Мой код:

lines3 = []

for x in range(0, len(lines1)):
    if lines1[x] == "\n":
        pass
    else:
        word = "".join(lines1)
        lines3.append(word)

Извините, приведенный выше синтаксис не был принят в качестве кода, поэтому обновлен каккотировки.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете просто сделать это: предположим, что list1 содержит ваши входные данные

temp = list()
list2 = list()
for line in list1:
    if line == '\n':
        list2.append(' '.join(temp))
        temp = list()
    else:
        temp.append(line)   # cache elements until '\n'

Более изощренным способом вы можете использовать itertools.groupby для группировки элементов вокруг элемента '\n':

from itertools import groupby

list2 = [''.join(group) for f, group in groupby(list1, lambda x: x == '\n') if not f]

Если вы печатаете list2 элементов, они должны быть одинаковыми для обоих вышеуказанных подходов.

0 голосов
/ 05 февраля 2019

Я интерпретирую ваш вопрос как «как я могу разделить мой список строк на список списков строк, разделив их на основании наличия строки, состоящей из одной новой строки?».

Вы можете использовать groupby для идентификации строк просто-новой строки и строк-не-новой строки и добавить каждую группу строк не-новой строки в список результатов:

list1 = [
    "foo", 
    "bar",
    "\n",
    "baz",
    "qux"
]

import itertools
result = []
for k,v in itertools.groupby(list1, key=lambda line: line=="\n"):
    #when k is true, v is a collection of newlines, which we don't care about.
    #so only append when k is false.
    if not k:
        result.append(list(v))

print(result)

Результат:

[['foo', 'bar'], ['baz', 'qux']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...