PythonのcsvモジュールでDictReaderを使いたい

TAGS :

csvのDictReaderを使う

csv モジュールの DictReader を使ってみましょう。
DictReader のドキュメントは こちら です。

練習で使用する入力 CSV ファイルは、以前の記事の DictWriter で出力した CSV ファイルを使用します。
この記事 で出力した "test_b.csv" を使用します。。

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']

reader をFor文で回すと、列情報が取得できるので、Dictionary型に落とし込みます。

for row in reader:
  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})

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"
 }
}