3

これを投稿するのを少しためらっています-私に関する限り、それは本物の質問ですが、それが批判されているか、議論の招待であるとして閉鎖されているかどうかは理解できると思います...

とにかく、特定のイベントの非常に大きな Web ログを検索するには、Python を使用する必要があります。正規表現は良いでしょうが、私は特定のアプローチに縛られていません.GETリクエストのどこにでも現れる可能性のある2つの文字列を含む行が欲しいだけです.

典型的なファイルは 400 MB を超え、約 100 万行を含むため、完了までの時間とサーバー (ubuntu/nginx VM - かなり適切に仕様が定められており、過負荷になることはめったにありません) へのロードの両方の点でパフォーマンスが問題になる可能性があります。

私はかなり最近 Python に変換しました (かなり初心者ですが、まだ学ぶべきことがたくさんあることに注意してください)。これを達成するための最良の方法について少しガイダンスが欲しいです。

開いて繰り返しますか? 新しいファイルに grep してから開きますか? 2つのいくつかの組み合わせ?他の何か?

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 に答える