2013-04-24 107 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