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

PythonのcsvモジュールのDictReaderを使ってみます。

DictReaderのドキュメントは こちら です。

DictReaderは、CSVの行の情報を辞書型にするオブジェクトです。

DictReaderの基本的な使い方

サンプルで使用するCSVファイルを用意する

サンプルコードで使用する入力CSVファイルは、以下の記事のDictWriterで出力したtest_b.csvを使用します。

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

DictReader使用方法のサンプルコード

サンプルコードです。

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文で回すと列情報が取得できるので、辞書型に落とし込みます。

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

最後に、辞書型の第1階層のKEYは、CSVファイルの行番号とします。

num = reader.line_num
csv_data.update({num: inner_data})

DictReaderで読み込んだ結果

辞書型を表示してみます。
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"
    }
}