以下の3つのファイルを1つのJSONデータにするPythonプログラムをChatGPTに作成してもらいました。
mail-src,mail-subject aaa@yyy.com,"test ay1" aaa@yyy.com,"test ay2" aaa@zzz.com,"test az1" bbb@yyy.com,"test by1" bbb@zzz.com,"test bz1" ccc@yyy.com,"test cy1" ccc@zzz.com,"test cz1" uid,mail-src user-a,"aaa@yyy.com,aaa@zzz.com" user-b,"bbb@yyy.com,bbb@zzz.com" user-c,"ccc@yyy.com,ccc@zzz.com" dest,state,category,black,pc,uid,mail https://aaa.com:9001/aaa,pass,phishing,no,pc-a,user-a,aaa@xxx.com https://bbb.com:9001/bbb,block,c2,yes,pc-b,user-b,bbb@xxx.com https://ccc.com:9001/ccc,pass,c2,yes,pc-c,user-c,ccc@xxx.com
出来上がりのJSONイメージは以下の通りです。
[ { "dest": "https://aaa.com:9001/aaa", "state": "pass", "category": "phishing", "black": "no", "pc": "pc-a", "uid": "user-a", "mail": "aaa@xxx.com", "mail-src": { "aaa@yyy.com": [ "test ay1", "test ay2" ], "aaa@zzz.com": [ "test az1" ] } }, { "dest": "https://bbb.com:9001/bbb", "state": "block", "category": "c2", "black": "yes", "pc": "pc-b", "uid": "user-b", "mail": "bbb@xxx.com", "mail-src": { "bbb@yyy.com": [ "test by1" ], "bbb@zzz.com": [ "test bz1" ] } }, { "dest": "https://ccc.com:9001/ccc", "state": "pass", "category": "c2", "black": "yes", "pc": "pc-c", "uid": "user-c", "mail": "ccc@xxx.com", "mail-src": { "ccc@yyy.com": [ "test cy1" ], "ccc@zzz.com": [ "test cz1" ] } } ]
そして実際にChatGPTに作成してもらった Pythonプログラムは以下の通りです。(すこし自分の環境に合わせて修正はしていますが。)
import csv import json # CSVファイルを読み込み、データを取得 # # 最初の部分では、mail_src.csv、mail_data.csv、url_data.csv という # 3つのファイルをそれぞれ辞書形式に読み込みます。 # これにより、各ファイルのデータが辞書のリストとして取得されます。 # それぞれの辞書内には、CSVのヘッダーがキーとして使用され、 # 各行のデータがそれぞれの辞書として格納されます。 with open('mail_src.csv', 'r') as file: mail_src_data = list(csv.DictReader(file)) with open('mail_data.csv', 'r') as file: uid_data = list(csv.DictReader(file)) with open('url_data.csv', 'r') as file: dest_data = list(csv.DictReader(file)) # メールアドレスと件名をマッピングする辞書を作成 # # mail_src.csv ファイルの内容から、メールアドレスと件名のマッピングを # 作成します。mail_subject_map という辞書を作成し、 # メールアドレスをキーにして、それに関連する件名をリストとして格納します。 mail_subject_map = {} for entry in mail_src_data: mail = entry['mail-src'] subject = entry['subject'].replace('\u201d', '').replace('\"', '') if mail in mail_subject_map: mail_subject_map[mail].append(subject) else: mail_subject_map[mail] = [subject] # JSONデータを構築 # # dest_data の情報を元にして新しい JSON データを構築します。 # 各行の情報を元に、dest_entry という辞書を作成し、'dest'、'state'、 # 'category'、'black'、'pc'、'uid'、'mail'というキーを持たせます。 json_data = [] for entry in dest_data: uid = entry['uid'] mail = entry['mail'] dest_entry = { 'dest': entry['dest'], 'state': entry['state'], 'category': entry['category'], 'black': entry['black'], 'pc': entry['pc'], 'uid': uid, 'mail': mail, 'mail-src': {} } # mail-src内のデータを整形 # # 'mail-src' キーに関連する情報を整形します。 # これは、mail_data.csv と mail_src.csv の情報を組み合わせ、 # 指定された形式で'mail-src' キーの中身を構築するための処理です。 if uid in [row['uid'] for row in uid_data]: mail_src = [x.strip() for x in next(row['mail-src'] for row in uid_data if row['uid'] == uid).split(',')] for src in mail_src: if src in mail_subject_map: dest_entry['mail-src'][src] = mail_subject_map[src] json_data.append(dest_entry) # JSON形式に変換して出力 # # json.dumps() を使用して json_output に JSON 形式のデータを出力します。 # これにより、json_output には指定された形式の JSON データが格納されます。 # そして、print(json_output) により、この JSON データが出力されます。 json_output = json.dumps(json_data, indent=2) print(json_output)
人間が作るとなるとPythonに詳しい人でも数時間はかかりそうですが、ChatGPT は一瞬で作ってしまうところがすごいですね。
また、私はPython初心者なので、見たことないような関数を使われていると勉強になります。
コメントを残す