PythonのCSVモジュールのExcel的書式の中身を確認してみた

Pythonのcsvモジュールでは、csvファイルの書式を一つ一つ指定することもできますが、ある程度まとめた形で指定することもできます。 readerオブジェクトとwriterオブジェクトの既定値はexcelになっていますので、それぞれの設定がどうなっているのか確認してみました。

csvの書式は RFC4180 に定義されています。 まあ、あまりにもわかりやすいので独自の拡張をしてしまったりしますが。(例えば、コメントとか。)

csv.excelインスタンスのプロパティ

csv.excelクラスのインスタンスを作って、プロパティを表示させてみました。

>>> import csv

>>> dialect = csv.excel
>>> dialect
<class 'csv.excel'>

>>> print(dialect.delimiter)
,

>>> print(dialect.doublequote)
True

>>> print(dialect.escapechar)
None

>>> print(dialect.lineterminator)
    # 改行コード


>>> print(dialect.quotechar)
"

>>> print(dialect.quoting)
0

>>> print(dialect.skipinitialspace)
False

>>> print(dialect.strict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'excel' has no attribute 'strict'
プロパティ 設定値 内容
delimiter , フィールドの区分けをする文字
doublequote True フィールドの値の一部としてquotecharがある場合に その文字を2重化してエスケープするか
escapechar None エスケープ用の文字
lineterminator 改行コード レコードの終端文字(readerでは無視される)
quotechar " 特殊文字や改行コードを含むフィールドを括る文字
quoting 0 どれくらい積極的にクォートするか
skipinitialspace False delimiterに続く空白を無視するか
strict   不正なcsvの場合にエラーにするか

フィールド内のデータの開始と終端を表すためにデータを特定の文字(quotechar)で括ることをクォートと呼びます。

strictは定義されないようです。

quotingに定数を指定する場合は、下表から選びます。

定数名 数値 オブジェクト 内容
csv.QUOTE_ALL 1 writer 全てのフィールドをクォートする
csv.QUOTE_MINIMAL 0 writer 特殊文字や改行コードを含むフィールドだけをクォートする
csv.QUOTE_NONNUMERIC 2 writer 全ての非数値のフィールドをクォートする
reader クォートされていないフィールドは全てfloatとして読み込む
csv.QUOTE_NONE 3 writer

クォートしない

データ内にdelimiter文字がある場合はescapecharをその前に付加する

reader クォート文字を特別扱いしない

一般的なcsvですね。

Visual Basicのようにコメント行を定義できると便利だったりするのですが、仕方ないですね。

広告

PythonでCSVカテゴリの投稿