Python CSV を扱う #6
株式会社リュディアです。今回は CSV ファイルの読み書きと辞書型についてまとめます。
前回までの Python で CSV を扱うことについてのまとめへのリンクは以下を参考にしてください。
CSV のフォーマット自体に関するまとめは以下のリンクを参照してください。
では以下のコードを見てください。前回の CSV の読み込みのソースと同じでリストとして読み込んでいた部分を辞書型として読み込むように変更しています。データは辞書型の読み込み用に note_dict_read_sample.csv を用意しました。以下の内容です。
ではこのファイルを辞書型として読み込んでみましょう。以下の例を見てください。
import csv
l = []
try:
with open('note_dict_read_sample.csv', 'r', encoding = 'utf_8-sig') as f:
reader = csv.DictReader(f)
keys = reader.fieldnames
print(keys)
for row in reader:
l.append(row)
print(l)
except FileNotFoundError as e:
print('File not found', e)
# ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7']
# [{'key1': '1_1', 'key2': '1_2', 'key3': '1_3', 'key4': '1_4', 'key5': '1_5', 'key6': '1_6', 'key7': '1_7'}, {'key1': '2_1', 'key2': '2_2', 'key3': '2_3', 'key4': '2_4', 'key5': '2_5', 'key6': '2_6', 'key7': '2_7'}, {'key1': '3_1', 'key2': '3_2', 'key3': '3_3', 'key4': '3_4', 'key5': '3_5', 'key6': '3_6', 'key7': '3_7'}]
辞書型で読み込めていることがわかりますね。以前にまとめたリストとして読み込む例と異なるのは csv.reader(f) が csv.DictReader(f) になっていることです。 あと key の行は reader.fieldnames で取得しています。これで CSV 形式のファイルの内容を辞書型として取得することができました。
次にこれを他のファイル名で CSV として書き戻してみます。前半は先ほどの読み込みの例と同じです。その後、note_dict_write_sample.csv に書き戻しています。
import csv
l = []
try:
with open('note_dict_read_sample.csv', 'r', encoding = 'utf_8-sig') as f:
reader = csv.DictReader(f)
keys = reader.fieldnames
print(keys)
for row in reader:
l.append(row)
print(l)
with open('note_dict_write_sample.csv', 'w', encoding = 'utf_8-sig', newline = '') as wf:
writer = csv.DictWriter(wf, fieldnames = keys)
for row in l:
writer.writerow(row)
except FileNotFoundError as e:
print('File not found', e)
# ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7']
# [{'key1': '1_1', 'key2': '1_2', 'key3': '1_3', 'key4': '1_4', 'key5': '1_5', 'key6': '1_6', 'key7': '1_7'}, {'key1': '2_1', 'key2': '2_2', 'key3': '2_3', 'key4': '2_4', 'key5': '2_5', 'key6': '2_6', 'key7': '2_7'}, {'key1': '3_1', 'key2': '3_2', 'key3': '3_3', 'key4': '3_4', 'key5': '3_5', 'key6': '3_6', 'key7': '3_7'}]
こちらもリストとして書き込む場合とほとんど同じですね。違いは csv.writer() の部分が csv.DictWriter() になっているのと、DictWriter() の引数に fieldnames という辞書型のキーが並んだリストが追記されているのみです。
では、ごきげんよう。