匹配一行中的字符并打印python之前的行

Match characters in a line and print the line before python

我有一个日志文件,这个文件是这样的:

line1 input

line2 output

line3 input

line4 output

and so on...

根据输出,我想将输入和输出都提取到一个新文件中..

作为示例代码,我使用了 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

使用以下代码获取列表中文件的行。然后您可以轻松检索该行和上一行。另外我建议不要在 REPL 中 运行 这个,因为大日志文件可能会减慢 python REPL。

with open(fileName) as file:
    content = file.readlines()

希望对您有所帮助。

没有在内存中存储超过两行:

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() 与该函数一起使用,以编写匹配的 input/output 对。