
PythonでCSVファイルを扱う際に便利なのが csv モジュールです。
その中でも csv.DictWriter は、辞書形式のデータをCSVファイルに書き込むためのメソッドです。
この記事では csv.DictWriter の基本的な使い方から、指定できるオプション、csv.DictReader との違いまでをわかりやすく丁寧に解説します。
csv.DictWriter とは?
csv.DictWriter は、辞書(dict)形式のデータをCSV形式に変換してファイルに書き出すためのクラスです。
通常の csv.writer とは異なり、リストではなく辞書を1行ずつ扱えるのが特徴です。
そのため、扱うデータに「列名」があり、項目名を指定して書き込みたい場合にとても便利です。
使い方
基本的な使い方
まずは、辞書データをCSVファイルに書き込む基本的なコードを見てみましょう。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import csv data = [ {"name": "Taro", "age": 25}, {"name": "Hanako", "age": 30} ] with open("people.csv", "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter(f, fieldnames=["name", "age"]) writer.writeheader() for row in data: writer.writerow(row) |
このコードでやっていることは:
fieldnamesに列の順番を指定.writeheader()で列名の行を書き出し.writerow()で辞書データを1行ずつ書き込み
これにより、name,age というヘッダー行を持ったCSVファイルが作成されます。
具体例:列名の順番を固定できる
辞書は順序が保証されないことがありますが、fieldnames を指定することでCSVの列の順番を明示的に固定できます。
|
1 2 |
writer = csv.DictWriter(f, fieldnames=["age", "name"]) |
このようにすると、CSVファイルの列順が age,name になります。
データの見やすさや後処理のためにも、列の順番をコントロールできるのは重要です。
csv.DictWriter のオプション一覧
csv.DictWriter は csv.writer と同じく、以下のようなオプションを指定できます。
| オプション | 説明 |
|---|---|
fieldnames |
列の順番と名前を指定(必須) |
delimiter |
区切り文字(例:カンマ ,、タブ \t) |
quotechar |
文字列を囲む引用符(例:") |
quoting |
引用の方法(csv.QUOTE_ALL など) |
lineterminator |
改行コードの指定(デフォルトは \r\n) |
extrasaction |
不明なフィールドがあったときの動作(raise または ignore) |
たとえば、タブ区切りで出力したい場合は以下のように書きます。
|
1 2 |
writer = csv.DictWriter(f, fieldnames=["name", "age"], delimiter="\t") |
DictReader との違いは?
csv.DictWriter と対になる存在が csv.DictReader です。
それぞれの役割は次のように異なります。
| クラス | 役割 |
|---|---|
csv.DictWriter |
辞書データをCSVに「書き出す」 |
csv.DictReader |
CSVファイルを辞書形式で「読み込む」 |
例えば以下のように読み込みに使います。
|
1 2 3 4 5 |
with open("people.csv", newline="", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: print(row["name"], row["age"]) |
このように、DictWriterで書き出したCSVファイルは、DictReaderで簡単に辞書として読み込めます。
キー名を使って値にアクセスできるので、カラムの位置を気にする必要がなく、コードが読みやすくなります。
注意点:辞書のキーとfieldnamesが一致しないとエラーに
DictWriter を使うとき、辞書のキーと fieldnames が一致していないとエラーになります。
例えば、次のようなコードはエラーになります。
|
1 2 3 |
data = [{"username": "taro"}] writer = csv.DictWriter(f, fieldnames=["name"]) |
このようなときは、extrasaction="ignore" を指定すると、指定されていないキーは無視されます。
|
1 2 |
writer = csv.DictWriter(f, fieldnames=["name"], extrasaction="ignore") |
まとめ
今回は csv.DictWriter の使い方について詳しく紹介しました。
DictWriterは辞書形式のデータをCSVに書き出すクラスfieldnamesで列の順番と名前を明示的に指定.writeheader()でヘッダー行を書き出し、.writerow()で1行ずつ出力- オプションを使えば区切り文字や引用符の設定も可能
- 読み込みには
csv.DictReaderを使うことで辞書形式でデータを扱える
表形式のデータを扱う場面では、DictWriter と DictReader をセットで覚えておくと非常に便利です。
データの入出力処理を簡潔に、かつ読みやすく書けるようになります。

