我有一个列表,其中包含来自某些日志的数据,其中日志的每一行均作为新元素写入,并且在完成并再次继续时还写入\n (new line)
。
我在这里的想法是添加所有元素,直到在列表中找到\ n为止,然后将它们添加到一个字符串中,然后将其发送到另一个列表中,然后继续该过程直至最后。
示例:
list1 = ['\ tat ONEONEsun.nio.ch.EPollArrayWrapper.epollWait(Native 方法)\ n','\ tat sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)\ n','\ t sun.nio。 ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)\ n','\ t 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(本机方法)\ 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>(一个io.netty.channel.nio.SelectedSelectionKeySet)\ n','\ t-锁定 <0x0000000080d40f80>,'\ n']
我要添加
中的元素`'\ tat ONEONEsun.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>(a io.netty.channel.nio.SelectedSelectionKeySet)\ n','\ t-锁定 <0x0445000'\ n'
放入一个字符串并将其发送到另一个列表,跳过\n
元素,然后再次从下一个元素添加它,直到找到下一个\n
,依此类推。可能吗?我尝试了下面的方法,但是整个代码都被添加了。
我正在尝试分析进入我们的某些日志并被卡在这里。
我的代码:
lines3 = []
for x in range(0, len(lines1)): if lines1[x] == "\n": pass else: word = "".join(lines1) lines3.append(word)
抱歉,上面的语法未被接受为代码,因此已更新为引号。
答案 0 :(得分:1)
我将您的问题解释为“如何将我的字符串列表分离为字符串列表,并根据由单个换行符组成的字符串的存在将它们分开?”。
您可以使用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']]
答案 1 :(得分:0)
您可以简单地执行以下操作:
假设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
元素,则上述两种方法都应相同。