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