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のようにコメント行を定義できると便利だったりするのですが、仕方ないですね。

公開日

広告