PythonでApacheアクセスログをCSVファイルへ変換する方法

test.logというApacheのアクセスログをCSVファイルに変換する方法です。
ここを参考にしています。
http://www.atmarkit.co.jp/ait/articles/1307/11/news009_3.html

変換後のファイルはtest.csvにします。
test.logの内容

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

デフォルトのアクセスログですね。

import re
fr = open('test.log')
fw = open('test.csv', 'w')
line = fr.readline()
while line:
    fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-)', r'\1,\2,\3,\4,\5,\6,\7,\8', line)
    fw.write(fline)
    line = fr.readline()
fr.close()
fw.close()

ファイルのデータを一行ずつ読み込んで正規表現のsub関数を使ってログを
8つのパートに分割しcsv形式で書き込んでいます。

正規表現の部分がなかなか慣れていないので悩むところです。
ログの項目を増やした時のメモ。

■sample accesslog
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
↓↓↓
fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-)', r'\1,\2,\3,\4,\5,\6,\7,\8', line)

■refererとuser agentを追加したとき
222.31.3.3 - frank [10/Oct/2000:13:55:36 -0700] "GET /index.html HTTP/1.0" 200 2326 "http://jbclub.xii.jp/" "Mozilla/5.0 (Linux; U; Android 4.2.2; ja-jp; SO-04E Build/10.3.1.B.0.256) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"
↓↓↓
fline = re.sub(r'^(\S+) (\S+) (\S+) \[([^\]]+)\] "([A-Z]+) ([^ "]+)? HTTP/[0-9.]+" ([0-9]{3}) ([0-9]+|-) "([^\"]*)" "([^\"]*)"', r'\1,\2,\3,\4,\5,\6,\7,\8,\9,\10', line)

refererとuser agentを追加したときは”([^\”]*)”を単純に2個追加しました。
これで一旦はできました。

以上

関連する投稿:

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください