
PythonでCSVファイルを扱うときに便利なのが、標準ライブラリの csv
モジュールです。
その中でも特によく使われるのが csv.DictReader
。
これは、CSVの1行1行を「辞書」として扱えるようにする機能です。
この記事では、csv.DictReader
の基本的な使い方から、実際の活用シーンまで、初心者にもわかりやすく解説します。
DictReaderとは?
通常、CSVファイルを csv.reader
で読み込むと、各行はリスト(list)として扱われます。
それに対して csv.DictReader
は、各行を「列名をキーとした辞書(dict)」として扱えるようにするクラスです。
つまり、CSVのヘッダー行(1行目)をもとに、各行の値にキー名を自動で割り当ててくれます。
具体例①:基本的な使い方
次のようなCSVファイル users.csv
があるとします。
1 2 3 4 |
USER_ID,NAME,PASSWORD u001,山田太郎,pass123 u002,鈴木花子,abc789 |
このCSVを DictReader
で読み込むと、各行が下記のような辞書になります:
1 2 3 4 5 6 7 |
import csv with open("users.csv", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: print(row) |
出力:
1 2 3 |
{'USER_ID': 'u001', 'NAME': '山田太郎', 'PASSWORD': 'pass123'} {'USER_ID': 'u002', 'NAME': '鈴木花子', 'PASSWORD': 'abc789'} |
このように、リストではなく辞書として読み取れるため、row["USER_ID"]
のようにカラム名で直接アクセスできるのが大きな利点です。
具体例②:値を取り出して整形表示
辞書として扱えるので、各カラムに名前でアクセスできます。
1 2 3 4 5 6 7 |
with open("users.csv", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: user_id = row.get("USER_ID") name = row.get("NAME") print(f"{user_id} さんの名前は {name} です") |
各ユーザーの情報を、簡単に整った形で出力できます。
具体例③:存在しないカラムへの安全なアクセス
「PASSWORD」カラムが存在しない行があるかもしれないときも、get()
を使えば安全です。
1 2 3 4 5 6 |
with open("users.csv", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: password = row.get("PASSWORD", "未設定") print(f"パスワード:{password}") |
これで KeyError
を防ぎながら、デフォルト値を設定できます。
ヘッダー行がないCSVを扱いたい場合
DictReader
は1行目を自動的にヘッダーとして扱います。
ただ、もしヘッダーがないCSVを扱いたい場合は fieldnames
を指定することで解決できます。
1 2 3 4 5 |
with open("noheader.csv", encoding="utf-8") as f: reader = csv.DictReader(f, fieldnames=["ID", "NAME", "SCORE"]) for row in reader: print(row) |
このようにすれば、1行目をデータとして扱いながらも、辞書として処理可能です。
文字コードや改行コードにも注意
CSVを扱うときは、エンコーディング(utf-8
や shift_jis
)や改行コード(Windows の場合 newline=''
指定)に注意が必要です。
1 2 3 |
with open("file.csv", encoding="utf-8", newline="") as f: reader = csv.DictReader(f) |
このように書いておけば、OS間の互換性が高くなります。
DictReader
と reader
の違い
点 | csv.reader | csv.DictReader |
---|---|---|
出力形式 | リスト(list) | 辞書(dict) |
カラム名でのアクセス | できない(添字のみ) | できる("NAME" などでアクセス) |
ヘッダーの扱い | 自分で処理する必要あり | 自動で1行目をヘッダーとして扱う |
まとめ
csv.DictReader
は、CSVファイルを辞書として読み取れる便利なクラス- カラム名で直接アクセスでき、コードが読みやすくなる
row.get("カラム名")
を使えば安全に値を取り出せる- ヘッダーのないCSVにも
fieldnames
で対応可能 - CSV処理ではほぼ定番なので、ぜひ覚えておきたい機能
辞書として使えることで、データの扱いやすさが格段に上がるため、実務やデータ分析でも頻繁に登場するメソッドです。