从特定文件中读取python中的文件

时间:2014-09-23 14:37:27

标签: python

我有一个大日志文件,我想从此日志中读取相关部分。

每个部分都以###start log###开头,因此我需要搜索最后一次出现的###start log###,然后读取这些行直到文件末尾。

我看到一个可以通过搜索(数字)搜索一行的解决方案,但我不知道,我只知道该行的内容。

此案例的最佳解决方案是什么?

3 个答案:

答案 0 :(得分:1)

我建议向后读取文件,直到第一次出现开始标记。 您可以通过以下两种方式之一来完成:如果文件适合内存,请尝试:Read a file in reverse order using python

如果文件太大 - 您可能会发现此链接有用: http://code.activestate.com/recipes/120686-read-a-text-file-backwards/

答案 1 :(得分:1)

鉴于文件的大小,您基本上需要以相反的顺序读取文件。 python中how to read a file in reverse order上有一些帖子;如果您使用的是unix系统,您也可以查看unix tac命令,然后通过管道读取输出,并在点击日志开头时停止:

>>> from subprocess import PIPE, Popen
>>> from itertools import takewhile
>>> with Popen(['tac', 'tmp.txt'], stdout=PIPE) as proc:
...     iter = takewhile(lambda line: line != b'###start log###\n', proc.stdout)
...     lines = list(iter)

然后,正确顺序的最后一个日志行将是:

>>> list(reversed(lines))

答案 2 :(得分:0)

with open(filename) as handle:
    text = handle.read()
lines = text.splitlines()
lines.reverse()
i = next(i for i, line in enumerate(lines) if line == '###start log###')
relevant_lines = lines[:i]
relevant_lines.reverse()