【Python】csv.DictWriterとは?指定オブション、DictReaderとの違いまでわかりやすく解説

PythonでCSVファイルを扱う際に便利なのが csv モジュールです。

その中でも csv.DictWriter は、辞書形式のデータをCSVファイルに書き込むためのメソッドです。

この記事では csv.DictWriter の基本的な使い方から、指定できるオプション、csv.DictReader との違いまでをわかりやすく丁寧に解説します。

csv.DictWriter とは?

csv.DictWriter は、辞書(dict)形式のデータをCSV形式に変換してファイルに書き出すためのクラスです。

通常の csv.writer とは異なり、リストではなく辞書を1行ずつ扱えるのが特徴です。

そのため、扱うデータに「列名」があり、項目名を指定して書き込みたい場合にとても便利です。

使い方

基本的な使い方

まずは、辞書データをCSVファイルに書き込む基本的なコードを見てみましょう。

このコードでやっていることは:

  • fieldnames に列の順番を指定
  • .writeheader() で列名の行を書き出し
  • .writerow() で辞書データを1行ずつ書き込み

これにより、name,age というヘッダー行を持ったCSVファイルが作成されます。

具体例:列名の順番を固定できる

辞書は順序が保証されないことがありますが、fieldnames を指定することでCSVの列の順番を明示的に固定できます。

このようにすると、CSVファイルの列順が age,name になります。

データの見やすさや後処理のためにも、列の順番をコントロールできるのは重要です。

csv.DictWriter のオプション一覧

csv.DictWritercsv.writer と同じく、以下のようなオプションを指定できます。

オプション 説明
fieldnames 列の順番と名前を指定(必須)
delimiter 区切り文字(例:カンマ ,、タブ \t
quotechar 文字列を囲む引用符(例:"
quoting 引用の方法(csv.QUOTE_ALL など)
lineterminator 改行コードの指定(デフォルトは \r\n
extrasaction 不明なフィールドがあったときの動作(raise または ignore

たとえば、タブ区切りで出力したい場合は以下のように書きます。

DictReader との違いは?

csv.DictWriter と対になる存在が csv.DictReader です。

それぞれの役割は次のように異なります。

クラス 役割
csv.DictWriter 辞書データをCSVに「書き出す」
csv.DictReader CSVファイルを辞書形式で「読み込む」

例えば以下のように読み込みに使います。

このように、DictWriterで書き出したCSVファイルは、DictReaderで簡単に辞書として読み込めます。

キー名を使って値にアクセスできるので、カラムの位置を気にする必要がなく、コードが読みやすくなります。

注意点:辞書のキーとfieldnamesが一致しないとエラーに

DictWriter を使うとき、辞書のキーと fieldnames が一致していないとエラーになります。

例えば、次のようなコードはエラーになります。

このようなときは、extrasaction="ignore" を指定すると、指定されていないキーは無視されます。

まとめ

今回は csv.DictWriter の使い方について詳しく紹介しました。

  • DictWriter は辞書形式のデータをCSVに書き出すクラス
  • fieldnames で列の順番と名前を明示的に指定
  • .writeheader() でヘッダー行を書き出し、.writerow() で1行ずつ出力
  • オプションを使えば区切り文字や引用符の設定も可能
  • 読み込みには csv.DictReader を使うことで辞書形式でデータを扱える

表形式のデータを扱う場面では、DictWriterDictReader をセットで覚えておくと非常に便利です。

データの入出力処理を簡潔に、かつ読みやすく書けるようになります。

おすすめの記事