# 12.20 `csv` -- CSV ファイルの読み書き

バージョン2.3 以降で新規追加された 仕様です。

CSV (Comma Separated Values、カンマ区切り値列) と呼ばれる形式は、 スプレッドシートやデータベース間でのデータのインポートやエクスポート における最も一般的な形式です。``CSV 標準'' は存在しないため、 CSV 形式はデータを読み書きする多くのアプリケーション上の操作に応じて 定義されているにすぎません。標準がないということは、異なるアプリケーション によって生成されたり取り込まれたりするデータ間では、しばしば微妙な 違いが発生するということを意味します。こうした違いのために、複数の データ源から得られた CSV ファイルを処理する作業が鬱陶しいものになる ことがあります。とはいえ、デリミタ (delimiter) やクオート文字の 相違はあっても、全体的な形式は十分似通っているため、こうしたデータを 効率的に操作し、データの読み書きにおける細々としたことをプログラマ から隠蔽するような単一のモジュールを書くことは可能です。

`csv` モジュールでは、CSV 形式で書かれたテーブル状の データを読み書きするためのクラスを実装しています。 このモジュールを使うことで、プログラマは Excel で使われている CSV 形式に関して詳しい知識をもっていなくても、 ``このデータを Excel で 推奨されている形式で書いてください'' とか、 ``データを Excel で 作成されたこのファイルから読み出してください'' と言うことができます。 プログラマはまた、他のアプリケーションが解釈できる CSV 形式を記述したり、 独自の特殊な目的をもった CSV 形式を定義することができます。

`csv` モジュールの `reader` および `writer` オブジェクトはシーケンス型を読み書きします。プログラマは `DictReader` や `DictWriter` クラスを使うことで、 データを辞書形式で読み書きすることもできます。

注意: このバージョンの `csv` モジュールは Unicode 入力をサポート していません。また、現在のところ、 ASCII NUL 文字に関連したいくつかの 問題があります。従って、安全を期すには、全ての入力を一般的には印字可能な ASCII にしなければなりません。これらの制限は将来取り去られる ことになっています。

参考資料:

PEP 305, CSV File API
  Python へのこのモジュールの追加を提案している Python 改良案 (PEP: Python Enhancement Proposal)