Pythonを触ってみる3
pythonの開発環境ができたのでログ解析に必要な関数を試してみました。
ファイル読み込み
ログ解析はログファイルを読み込むことからはじまるのでまずはファイルを読み込むopen関数を試します。
読み込むログファイル
(ログ出力時間 プロセスID ログレベル ログ内容)
19:02:49.615 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp start
19:02:50.568 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert start
19:03:49.569 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp start
19:03:51.131 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert end
19:03:51.146 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp end
19:03:56.710 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:16.319 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:54.914 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp end
このファイルをsample_log_01.txtというなまえでc:/inputに保存します。
サンプルプログラム
f = open("c:/input/sample_log_01.txt", 'r', encoding='UTF-8')
while True:
line = f.readline()
if line:
print(line)
else:
break
f.close()
open関数で読み込みたいファイルのパス、モード、エンコーディングを指定します。
読み込み用で開くのでモードは"r"、ファイルの文字コードはUTF-8なのでエンコーディングは"UTF-8"を指定します。
読み込んだらreadline()で1行ずつ読み込み出力してます。
最後にファイルをクローズして終了。
実行結果
19:02:49.615 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp start
19:02:50.568 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert start
19:03:49.569 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp start
19:03:51.131 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert end
19:03:51.146 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp end
19:03:56.710 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:16.319 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:54.914 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp end
空の行が出力されるのが気になりますね。
サンプルプログラム(修正後)
f = open("c:/input/sample_log_01.txt", 'r', encoding='UTF-8')
while True:
line = f.readline()
if line:
print(line.replace("\n", ""))
else:
break
f.close()
改行コードreplace関数を使ってをブランクに置換するように修正しました。
実行結果(修正後)
19:02:49.615 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp start
19:02:50.568 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert start
19:03:49.569 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp start
19:03:51.131 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO data insert end
19:03:51.146 4fcd1c9d-75fe-4396-a7a0-0af32eb066c2 INFO BatchApp end
19:03:56.710 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:16.319 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert start
19:04:19.944 0cc41e62-d704-4685-92e2-fb49922d42ca INFO data insert end
19:04:54.914 0cc41e62-d704-4685-92e2-fb49922d42ca INFO BatchApp end
改行コードが置換されて出力されるようになりました。
これで解析の下準備は完了。
次回の予定
・"BatchApp"を含む行のみを解析対象にする
・プロセスID毎に 開始時間と終了時間を解析して差分を計算する