このプログラムの趣旨
このプログラムは、膨大なログの中から任意のIPアドレスを探し出すプログラムです。プログラム作成の背景
・お客さんから特定の通信先(複数個)とのログがないか確認して欲しいと依頼を受ける。 ・対象のログフォルダを確認してみると、1ファイルあたり数千行のログファイルが数千個存在。 ・手作業でのログ調査をあきらめ、空を見上げる。 ・Python触ったことあるし、なんとかしてプログラムで出来ないものか考えてみる。 ・作ってみた。プログラム処理のざっくり概要
・特定のフォルダ内のファイルを時系列順にソート ・ファイルを1つずつ読み込み、リスト化する ・確認したいIPアドレスと、リストの中身を比較する ・リスト内にあれば、見つかった旨をCSVに書き込むプログラムの中身
```log-finder.py import glob import csv import os import re'''
「XXXX」フォルダに入っているログに
任意のIPアドレスとの通信がないか確認するプログラムです。
検索したいIPアドレスリストは、「ipaddress_list.csv」に記載してください。
フォルダ構造は以下の通りです。
--XXXX
|--検索に使用するログファイルたち
--本プログラム
--ipaddress_list.csv
'''
ファイルの最終更新時刻順にソートする
files = sorted(glob.glob("XXXX"), key=lambda f: os.stat(f).st_mtime, reverse=False)
フォルダ内のコンフィグを1個ずつ見ていく
for file in files:
# result.csvに書き込むための定義
with open('result.csv','a', newline='') as result_csv:
    # 検索しているファイル名の表示
    print(file + 'で検索しています・・・')
    # 検索しているファイル名をCSVに書き込み
    writer = csv.writer(result_csv)
    # コンフィグを読み込んで、スペース区切りでリスト化
    with open(file, mode='r', newline='', encoding='shift-jis', errors="ignore") as config_file:
        lines = [line for line in config_file]
        print('ログファイルを読み込みました')
        # リストを全部結合する
        total_line_list = ''
        for line_list in lines:
            total_line_list += line_list
        # リスト内の要素を区切り文字で区切る
        split_line_list = re.split(' |=|\r\n',total_line_list)
        # print(split_line_list)
    # 検索したいIPリストを記載したCSVファイルを読み込む
    with open('ipaddress_list.csv') as f:
    #csvファイルを2行目から読み込み(ヘッダースキップ)
        reader = csv.reader(f)
        next(reader)
        serch_ipaddress = ''
        for row in reader:
            # 確認したいIPアドレスをリスト化
            serch_ipaddress = row
            
            # リストを文字列に変換
            mapped_ipaddress = map(str, serch_ipaddress)
            string_converted_ipaddress = ','.join(mapped_ipaddress)
            # IPアドレスがコンフィグ内に存在するか確認
            if string_converted_ipaddress in split_line_list:
                writer.writerow([file + 'で' + string_converted_ipaddress + 'が見つかりました'])
            else:
                pass
    writer.writerow([file + 'での検索が完了しました'])
※もっときれいなコードの書き方あるかもしれないけど、部署内にコーディングできる人がいないので完全に自己流です。
```ipaddress_list.csv
探したいIPアドレス(この行の読み込みはスキップされます)
192.168.0.1
192.168.0.2
プロンプト画面.
ログファイルを読み込みました
{ログファイル#1}で検索しています・・・
ログファイルを読み込みました
{ログファイル#2}で検索しています・・・
ログファイルを読み込みました
{ログファイル#3}で検索しています・・・
result.csv
{ログファイル#1}での検索が完了しました
{ログファイル#2}での検索が完了しました
{ログファイル#3}での検索が完了しました
{ログファイル#3}で192.168.0.1が見つかりました
あとはこれをpyinstallerでexeファイルにして、1クリックで実行できるようにしたら完了。
同じ依頼が数か月後も来たため、プログラム作成しておいてよかったと心の底から思ったのでした。