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ファイルを柔軟に扱うことができるようになります。