前提
csvとして保存されているアクセスログとボットの集計をしたい。出現回数をカウントして、csvに保存する。
実現したいこと
ipアドレスのみをカウントする
csvの形式は、
ID | ipアドレス | 日付・時刻 |
---|---|---|
1 | 192.168.0.1 | 20211210208 |
2 | 193.175.0.1 | 202111210141 |
といった形です。
出力としては、
列1 | 列2 |
---|---|
ipアドレス | 出現した総数 |
のような形で出力したいです。
発生している問題
日付までカウントされてしまう。
該当のソースコード
python
1import os 2import csv 3 4dirname = os.getcwd() 5 6def create_dict(type): 7 log_dict = {} 8 if type==1: 9 filename= dirname + '/data/accesslog.csv' 10 with codecs.open(filename) as f: 11 for i, line in enumerate(f.readlines()): 12 log_data = line.rstrip('\n').split(' ') 13 tmp = {i: log_data} 14 log_dict.update(tmp) 15 elif type==2: 16 filename=dirname + '/data/bot.csv' 17 with codecs.open(filename) as f: 18 for i, line in enumerate(f.readlines()): 19 log_data = line.rstrip('\n').split(' ') 20 tmp = {i: log_data} 21 log_dict.update(tmp) 22 return log_dict 23 24def key_count(log_dict): 25 count_dict = {} 26 for v in log_dict.values(): 27 if v[0] not in count_dict.keys(): 28 i=1 29 update_data = {v[0]:i} 30 count_dict.update(update_data) 31 else: 32 count_dict[v[0]]+=1 33 return count_dict 34 35lst1 =[] 36lst2 =[] 37 38type=1 39log_dict = create_dict(type) 40count_dict=key_count(log_dict) 41for k,v in sorted(count_dict.items(),key=lambda x:x[1],reverse=True): 42 lst1.append([k, v]) 43 44print(lst1) 45#実行結果[['ID,ipアドレス,日付・時刻', 1], ['1,192.168.0.1,20211210208', 1], ['2,193.175.0.1,202111210141', 1]] 46 47 48type=2 49log_dict = create_dict(type) 50count_dict=key_count(log_dict) 51for k,v in sorted(count_dict.items(),key=lambda x:x[1],reverse=True): 52 lst2.append([k, v]) 53
試したこと
【python】apacheのログ分析のコードを使用しましたが、元のログの形式が異なっている(?)のでうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
python3.8