2013-04-24 59 views
3

对发布这个有点犹豫 - 就我而言,这是一个真正的问题,但我想我会理解它是否被批评或关闭作为讨论邀请...在python中检查大日志文件

无论如何,我需要使用Python来搜索特定事件的一些相当大的Web日志。正则表达式会很好,但我没有被绑定到任何特定的方法 - 我只想要包含两个字符串的行可以出现在GET请求中的任何地方。

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

我是一个相当新的转换到Python(注意相当新手,但仍然有大量的学习),我想的最佳方式有点指导来实现这一

难道我打开和遍历? grep到一个新的文件,然后打开? 两者的一些组合? 还有别的吗?

+1

http://www.youtube.com/watch?v=ZOpR3P-jAno – root 2013-04-24 07:46:29

+2

有在PYCON 2013一个伟大的演示文稿标题为['服务器日志分析与熊猫'](http://pyvideo.org/video/1745/server-log-analysis-with-pandas-0)应该是一个很好的起点。 – 2013-04-24 07:46:53

+0

@BurhanKhalid :) – root 2013-04-24 07:47:12

回答

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