0Pricing
Python Academy · レッスン

csv.DictWriter による CSV の書き込み

DictReader と DictWriter を使って構造化データを CSV に書き込みます。

「csv.DictWriter による CSV の書き込み」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

概要

csv.writerとcsv.DictWriterは、引用符や区切り文字を自動的に処理しながら、PythonのデータをCSV形式に書き出します。

csv.writerの基本

csv.writer(f).writerow(row)は1行を書き出します。writerows(rows)は複数行を書き出します。
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
writer.writerow(['name', 'age'])
writer.writerow(['Alice', 30])
print(buf.getvalue())

引用符の動作

デフォルトでは、カンマや引用符を含むフィールドが自動的に引用符で囲まれます。quoting=csv.QUOTE_ALLを指定すると、すべてのフィールドが引用符で囲まれます。
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, quoting=csv.QUOTE_ALL)
writer.writerow(['Alice', 'NYC, NY', 30])
print(buf.getvalue())

csv.DictWriter

DictWriterはdictを行として書き出します。fieldnamesを指定してください。writeheader()で列ヘッダーを書き出します。
import csv, io
buf = io.StringIO()
fields = ['name', 'age']
writer = csv.DictWriter(buf, fieldnames=fields)
writer.writeheader()
writer.writerow({'name': 'Alice', 'age': 30})
print(buf.getvalue())

複数行に対するwriterows()

writer.writerows(list_of_rows)は、ループ内でwriterow()を呼び出すより効率的です。
import csv, io
buf = io.StringIO()
writer = csv.DictWriter(buf, fieldnames=['x','y'])
writer.writeheader()
writer.writerows([{'x':1,'y':2},{'x':3,'y':4}])
print(buf.getvalue())

カスタム区切り文字

csv.writer(f, delimiter='\t')は、タブ区切り値(TSV)を書き出します。
import csv, io
buf = io.StringIO()
writer = csv.writer(buf, delimiter='\t')
writer.writerow(['a', 'b', 'c'])
print(repr(buf.getvalue()))

extrasactionパラメーター

DictWriter(f, fieldnames, extrasaction='ignore')は、ValueErrorを発生させる代わりに、dict内の余分なキーを無視します。
import csv, io
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name'], extrasaction='ignore')
w.writeheader()
w.writerow({'name': 'Alice', 'extra': 'ignored'})
print(buf.getvalue())

実際のファイルへの書き込み

with open('out.csv','w',newline='',encoding='utf-8') as f: — 必ずnewline=''を使用し、エンコーディングを指定してください。
import csv, tempfile, os
tmp = tempfile.mktemp(suffix='.csv')
with open(tmp, 'w', newline='') as f:
    csv.writer(f).writerows([[1,2],[3,4]])
print(open(tmp).read())
os.unlink(tmp)

CSVへの追記

open(file, 'a')はデータを追記します。追記時にヘッダーを再度書き込まないよう注意してください。
import csv, io
buf = io.StringIO()
w = csv.writer(buf)
w.writerow(['x', 'y'])
print(buf.getvalue())

大量のデータをストリーミング書き込みする

行ごとに書き込みます。書き込む前にすべての行をメモリに蓄積しないでください。
import csv, io
buf = io.StringIO()
writer = csv.writer(buf)
for i in range(5):
    writer.writerow([i, i**2])
print(buf.getvalue())

ラウンドトリップテスト

データをCSVに書き出した後、読み戻して正しいことを確認します。
import csv, io
original = [{'name':'Alice','age':'30'},{'name':'Bob','age':'25'}]
buf = io.StringIO()
w = csv.DictWriter(buf, fieldnames=['name','age'])
w.writeheader()
w.writerows(original)
buf.seek(0)
read_back = list(csv.DictReader(buf))
print(read_back == original)

クイックチェック

列名を最初の行に書き出すDictWriterのメソッドはどれですか?

まとめ

csv.writerではwriterowとwriterowsを使用します。DictWriterではwriteheaderとwriterowまたはwriterowsを使用します。必ずnewline=''で開いてください。柔軟なdictにはextrasaction='ignore'を使用します。

次へ進む

この調子で頑張りましょう!次のレッスンに進んでください。

よくある質問

「csv.DictWriter による CSV の書き込み」レッスンは無料ですか?

はい。「csv.DictWriter による CSV の書き込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「csv.DictWriter による CSV の書き込み」で何を学びますか?

DictReader と DictWriter を使って構造化データを CSV に書き込みます。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「csv.DictWriter による CSV の書き込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. JSON のエンコードとデコード
  2. 入れ子になった JSON 構造の処理
  3. csv.reader による CSV の読み取り
  4. csv.DictWriter による CSV の書き込み
← Python Academyに戻る