
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
をセットで覚えておくと非常に便利です。
データの入出力処理を簡潔に、かつ読みやすく書けるようになります。