[Python]csv.DictReaderを理解する(delimiter、key、encoding)

Pythonにはcsvモジュールがあり、CSVファイルの読み込みや書き込みを行うことができます。csvモジュールの中には、DictReaderというクラスがあります。このクラスは、CSVファイルを辞書型として読み込むことができます。この記事では、csv.DictReaderを使ったCSVファイルの読み込みについて解説します。

csv.DictReaderとは

csv.DictReaderは、CSVファイルを辞書型として読み込むことができるクラスです。通常のcsv.readerとは異なり、列名を指定することができます。csv.DictReaderを使うことで、列名を指定することによってデータを取り出すことができます。

csv.DictReaderの基本的な使い方

まずは、csv.DictReaderの基本的な使い方を見ていきましょう。以下のようなCSVファイルがあるとします。

name,age,city
Alice,24,Tokyo
Bob,32,Osaka
Charlie,45,Tokyo

このCSVファイルを読み込むには、以下のようにします。

import csv
with open('sample.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

このプログラムを実行すると、以下のように出力されます。

{'name': 'Alice', 'age': '24', 'city': 'Tokyo'}
{'name': 'Bob', 'age': '32', 'city': 'Osaka'}
{'name': 'Charlie', 'age': '45', 'city': 'Tokyo'}

CSVファイルの各行が辞書型として取得されています。列名をキーとして、各行の値が値として設定されています。

delimiterの設定方法とその意味

CSVファイルは、カンマやタブ、スペースなどの区切り文字で区切られたファイルです。CSVファイルの区切り文字は、delimiterオプションで指定することができます。例えば、以下のようなCSVファイルがあるとします。

name|age|city
Alice|24|Tokyo
Bob|32|Osaka
Charlie|45|Tokyo

このCSVファイルを読み込むには、delimiterオプションを’|’として指定する必要があります。

import csv
with open('sample.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f, delimiter='|')
    for row in reader:
        print(row)

このプログラムを実行すると、以下のように出力されます。

{'name': 'Alice', 'age': '24', 'city': 'Tokyo'}
{'name': 'Bob', 'age': '32', 'city': 'Osaka'}
{'name': 'Charlie', 'age': '45', 'city': 'Tokyo'}

delimiterオプションによって、区切り文字が’|’になっていることが確認できます。

encodingの設定方法とその意味

CSVファイルのエンコーディングは、encodingオプションで指定することができます。例えば、以下のようなCSVファイルがあるとします。

name,age,city
山田,24,東京
鈴木,32,大阪
田中,45,東京

このCSVファイルは、Shift-JISでエンコードされています。このCSVファイルを読み込むには、encodingオプションを’shift_jis’として指定する必要があります。

import csv
with open('sample.csv', 'r', encoding='shift_jis') as f:
    reader = csv.DictReader(f)
    for row in reader:
        print(row)

このプログラムを実行すると、以下のように出力されます。

{'name': '山田', 'age': '24', 'city': '東京'}
{'name': '鈴木', 'age': '32', 'city': '大阪'}
{'name': '田中', 'age': '45', 'city': '東京'}

encodingオプションによって、エンコーディングが正しく指定されていることが確認できます。

keyの取得方法とその利用方法

csv.DictReaderを使うと、列名をキーとして取得することができます。例えば、以下のようなCSVファイルがあるとします。

name,age,city
Alice,24,Tokyo
Bob,32,Osaka
Charlie,45,Tokyo

このCSVファイルから、age列のみを取得する場合は、以下のようにします。

import csv
with open('sample.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        age = row['age']
        print(age)

このプログラムを実行すると、以下のように出力されます。

24
32
45

列名をキーとして、値を取り出しています。

csv.DictReaderの応用例

csv.DictReaderを使うことで、様々な応用が可能です。例えば、以下のようなCSVファイルがあるとします。

name,age,city
Alice,24,Tokyo
Bob,32,Osaka
Charlie,45,Tokyo

このCSVファイルから、city列が’Tokyo’の行だけを取得する場合は、以下のようにします。

import csv
with open('sample.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        if row['city'] == 'Tokyo':
            print(row)

このプログラムを実行すると、以下のように出力されます。

{'name': 'Alice', 'age': '24', 'city': 'Tokyo'}
{'name': 'Charlie', 'age': '45', 'city': 'Tokyo'}

city列が’Tokyo’の行だけが取得されています。

まとめ

csv.DictReaderを使えば、CSVファイルを辞書型として読み込むことができます。delimiterオプションで区切り文字を指定することができ、encodingオプションでエンコーディングを指定することができます。また、列名をキーとして値を取り出すことができます。

csv.DictReaderを使うことで、CSVファイルを柔軟に扱うことができるようになります。