我有一个日志文件,这个文件是这样的:
第1行输入
第2行输出
第3行输入
line4输出
依旧......
根据输出,我想将输入和输出都提取到新文件..
作为一个示例代码,我使用了print和方法.startswith,这对我很好,因为我只对如何将当前行拉到文件中以及之前的行中感兴趣。
以下是我的表现:
file = 'path_to_file'
index_list = []
line_list = []
with open(file) as f:
for index, line in enumerate(f):
line_list.append(line)
if line.startswith('b'):
index_list.append(index)
for index in index_list:
print line_list[index-1], line_list[index]
这段代码运行得很好,但我想知道是否有更多的pythonic方法可以做到这一点,节省内存。
提前谢谢。
BR
答案 0 :(得分:1)
不在内存中存储两行以上:
from itertools import izip
with open('test.log') as lines:
for input_line, output_line in izip(lines):
if output_line.startswith('b'):
print input_line
print output_line
将其放入函数中并将print
替换为yield
,您可以使用file.writelines()
与该函数一起编写匹配的输入/输出对。
答案 1 :(得分:0)
使用以下代码获取列表中文件的行。然后,您可以轻松检索该行和上一行。另外我建议不要在REPL中运行它,因为大型日志文件可能会减慢python REPL。
with open(fileName) as file:
content = file.readlines()
希望这有帮助。