1. ホーム
  2. パイソン

[解決済み】PythonでCSVを作成すると、Windowsで余計なキャリッジリターンが追加される。

2022-03-30 17:40:35

質問

import csv

with open('test.csv', 'w') as outfile:
    writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['hi', 'dude'])
    writer.writerow(['hi2', 'dude2'])

上記のコードでファイルが生成されます。 test.csv を追加したものです。 \r のように、各行で

hi,dude\r\r\nhi2,dude2\r\r\n

の代わりに、期待される

hi,dude\r\nhi2,dude2\r\n

なぜこのようなことが起こるのか、あるいは実際に望ましい動作なのか?

解決方法は?

Python 3:

公式 csv ドキュメント 推奨 open というファイルを作成します。 newline='' をすべてのプラットフォームで ユニバーサルな改行変換を無効にする :

with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    ...

CSVライターは、各行の末尾に lineterminator 方言の である。 '\r\n' は、デフォルトの excel というのは、すべてのプラットフォームで RFC 4180 を推奨しています。


Python 2:

Windows では、ファイルは常にバイナリモードで開いてください ( "rb" または "wb" ) に渡す前に csv.reader または csv.writer .

テキストファイルですが、CSV は バイナリ という形式があり、関係するライブラリは \r\n でレコードを区切ります。そのセパレータがテキストモードで書かれている場合、Pythonランタイムはそのセパレータを \n\r\n であり、それゆえ \r\r\n で観測された。

参照 前回の回答 .