Python で Apache のログ解析
2021/05/10
apache-log-parser
- ApacheのアクセスログをPythonのモジュールで読み込む - Qiita
- PythonでApacheログの解析(apache-log-parser) - Symfoware
- GitHub - rory/apache-log-parser: Parses log lines from an apache log
- 【Python】Apacheが吐き出したアクセスログを必要な部分だけcsvで書き出す - Skeptical Days
Apache のログフォーマット
pandas
If using all scalar values, you must pass an index
インデックスを付けると良い。
yaml
pyymal の loadメソッド は非推奨になっているので safe_loadメソッド を使用すること。
ユーザーエージェント判定のライブラリ (スクリプト本体では未使用)
Python
文字列結合
+ 。文字列と数値の場合は明示的な型変換が必要。
'hoge' + str(123)
for
for VAR in OBJECT:
# some process
for ... of 的な。
for num in range(10):
# some process
for(let i = 0; i < 10; i++) 相当。
インクリメント
++ のような演算子はない。 num += 1 のように記述する。
if
hogera = 42
if 'hoge' != 'piyo':
hogera = 23
else:
hogera = 404
反転
hoge = True
if not hoge:
# not processing
else:
# processing
三項演算子
hoge = 'hoge'
'piyo' if hoge == 'hoge' else 'fuga'
# piyo
要素を含むか
フォルダ内のファイル一覧
globモジュール を使用。
import glob
files = glob.glob('/hoge/piyo/fuga_*.txt')
for file in files:
# some process
# file is path string
正規表現
reモジュール 使用。
import re
from pprint import pprint
pprint(re.search( r'(.*(hoge.+?).*(hoge.+?).*)', 'hoge piyo fuga hogehoge' ).group(1)) # hoge piyo fuga hogehoge
pprint(re.search( r'(.*(hoge.+?).*(hoge.+?).*)', 'hoge piyo fuga hogehoge' ).group(2)) # hoge
pprint(re.search( r'(.*(hoge.+?).*(hoge.+?).*)', 'hoge piyo fuga hogehoge' ).group(3)) # hogeh
部分一致 (大文字小文字区別しない)
import re
hoge = 'Hoge'
if re.search( r'hoge', hoge, flags=re.IGNORECASE ):
# processing
else:
# not processing
辞書
x = { 'hoge': 42, 'piyo': 23 }
x['fuga'] = 404 # 追加
x['hoge'] = 500 # 変更
キーの存在チェック
キーが存在しない場合
複数の辞書をまとめる
辞書のソート
Counter
list が空かどうか
ショートサーキット
try ... catch ...
FileNotFoundError
with
Nene型
None かどうかの判定は is で行うのが望ましい。