我有一个列表,其中包含来自某些日志的数据,在这些日志中,日志的每一行都被写入一个新元素,并且在它完成并再次继续时,它也是一个\n (new line)。
我在这里的想法是添加所有元素,直到在列表中找到\n,并将它们添加到一个字符串中,并将它们发送到一个不同的列表中,然后继续这个过程直到结束。
示例:
ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait(Native方法)\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锁定<0x0012550080d3 fe80> ( io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0445000 '\n','\n',‘tat TWOTWOTWO.nio.ch.EPollArrayWrapper.epollWait(Native方法’)\ n',‘tat sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\n','\ta t sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\n',’\t .nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)\n',‘\t锁定<0x00 00000085d3fez0> (a io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0000000080d40f80>,'\n‘)
我想添加以下元素
‘\\tat ONEONEONEsun.nio.ch.EPollArrayWrapper.epollWait(Native方法’\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锁定<0x0012550080d3 fe80> ( io.netty.channel.nio.SelectedSelectionKeySet)\n',’\t锁定<0x0445000 '\n‘)
进入一个字符串并将其发送到另一个列表中,跳过\n元素,然后再次将其从下一个元素添加到找到下一个\n,以此类推。有可能吗?我已经尝试了下面的方法,但是整个代码都被添加了。
我在试着分析一些来找我们却被困在这里的日志。
我的代码:
lines3 = []
对于x在范围(0,len(lines1)):如果lines1x == "\n":传递其他: word =“.join(Lines1)”行3.追加(Word)
对不起,上面的语法没有被接受为代码,因此更新为引号。
发布于 2019-02-05 14:49:33
我将您的问题解释为“如何将我的字符串列表拆分为列表字符串列表,根据一个由单个换行符组成的字符串的存在将它们分开?”
可以使用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']]发布于 2019-02-05 15:13:13
您可以这样做:假设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元素,则上述两种方法都应该是相同的。
https://stackoverflow.com/questions/54536887
复制相似问题