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

时间:2016-03-23 10:45:39

标签: python file enumerate

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

  

第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

2 个答案:

答案 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()

希望这有帮助。