3

关于发布这个有点犹豫 - 就我而言,这是一个真正的问题,但我想我会理解它是否被批评或关闭为讨论邀请......

无论如何,我需要使用 Python 在一些相当大的网络日志中搜索特定事件。RegEx 会很好,但我不依赖于任何特定的方法——我只想要包含两个字符串的行,这些字符串可能出现在 GET 请求的任何地方。

由于一个典型的文件超过 400mb 并且包含大约一百万行,因此在完成时间和在服务器上加载方面的性能(ubuntu/nginx VM - 相当好的规范并且很少过度工作)可能是问题。

我是一个相当新的 Python 转换者(注意是一个新手,但仍有很多东西要学习),我想要一些关于实现这一目标的最佳方法的指导

我是否打开并迭代?grep到一个新文件然后打开?两者的某种组合?还有什么?

4

1 回答 1

2

只要您不一次读取整个文件而是连续遍历它,您应该没问题。我认为你是用 python 还是用 读取整个文件并不重要grep,你仍然需要加载整个文件:)。如果你利用生成器,你可以做到这对程序员非常友好:

# Generator; fetch specific rows from log file
def parse_log(filename):
    reg = re.prepare( '...')

    with open(filename,'r') as f:
       for row in f:
           match = reg.match(row)
           if match:
               yield match.group(1)

for i in parse_log('web.log'):
    pass # Do whatever you need with matched row
于 2013-04-24T07:50:57.357 回答