Python で Apache のログ解析

2021/05/10

apache-log-parser

Apache のログフォーマット

pandas

If using all scalar values, you must pass an index

インデックスを付けると良い。

yaml

pyymalloadメソッド は非推奨になっているので 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 で行うのが望ましい。

var_dump 的なもの

文字列の部分検索 (未使用)

リストの中にある複数の辞書を集計&ソート (未使用)


Written by Circle
A mound built by the accumulation of hyperlinks are like Kowloon.