csvのDictReaderを使う
csv モジュールの DictReader を使ってみましょう。
DictReader のドキュメントは こちら です。
練習で使用する入力 CSV ファイルは、以前の記事の DictWriter で出力した CSV ファイルを使用します。
この記事 で出力した "test_b.csv" を使用します。。
CSV ファイルの中身はこうなっています。
では、DictReader の実装をします。
Python
import os
import csv
import json
filename = 'test_b.csv'
file_path = os.path.join(os.getcwd(), filename)
csv_data = {}
f = open(file_path, 'r')
reader = csv.DictReader(f)
headers = reader.fieldnames # CSVのヘッダ情報を取得する。
for row in reader:
inner_data = {}
for header in headers:
inner_data.update({header: row[header]})
num = reader.line_num
csv_data.update({num: inner_data})
f.close()
print(json.dumps(csv_data, indent=4))
コードの説明
CSV のヘッダ情報は fieldnames で取得できます。
headers = reader.fieldnames
>> ['Name', 'Country', 'Job', 'Age']
>> ['Name', 'Country', 'Job', 'Age']
reader をFor文で回すと、列情報が取得できるので、Dictionary型に落とし込みます。
for row in reader:
inner_data = {}
for header in headers:
inner_data.update({header: row[header]})
inner_data = {}
for header in headers:
inner_data.update({header: row[header]})
row 情報は、以下のようになっています。
OrderedDict([('Name', 'Ken'), ('Country', 'US'), ('Job', 'Artist'), ('Age', '56')])
最後に、Dictionary型の第1階層のKEYは、CSVファイルの行番号とします。
num = reader.line_num
csv_data.update({num: inner_data})
csv_data.update({num: inner_data})
DictReaderで取得した結果
Dictionary型を表示すると、以下のようになっています。
これで、DictReader を使って、CSVファイルを読み込むことができました。
{
"2": {
"Name": "Ken",
"Country": "US",
"Job": "Artist",
"Age": "56"
},
"3": {
"Name": "Alan",
"Country": "Japan",
"Job": "Carpenter",
"Age": "27"
},
"4": {
"Name": "Steven",
"Country": "China",
"Job": "Artist",
"Age": "40"
}
}
"2": {
"Name": "Ken",
"Country": "US",
"Job": "Artist",
"Age": "56"
},
"3": {
"Name": "Alan",
"Country": "Japan",
"Job": "Carpenter",
"Age": "27"
},
"4": {
"Name": "Steven",
"Country": "China",
"Job": "Artist",
"Age": "40"
}
}