web-dev-qa-db-ja.com

Python csv writerは常にDOSの行末文字を使用しますか?

Pythonのcsvライブラリは常にDOSの行末文字を生成します。'wb'モードを使用していても、 Linux。

import csv

f = open('output.txt', 'wb');
writer = csv.writer(f)
writer.writerow([2,3,4]);
f.close()

上記のコードでは、行の区切り記号として常に'\r\n'を使用しています。 '\n'のみを使用するにはどうすればよいですか?

38
Vendetta

writer インスタンスにコンストラクタでカスタム lineterminator 引数を指定できます。

writer = csv.writer(f, lineterminator="\n")
68
Niklas B.

Niklasが回答 と同様に、 lineterminator引数 を使用すると、行末を選択できます。 '\n'にハードコーディングするのではなく、プラットフォームの 行区切り記号os.linesepを使用して、プラットフォームに依存しないようにします。また、Python 3( this コメントを参照)には、必ずnewline=''を指定してください。

import csv
import os

with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f, lineterminator=os.linesep)
    writer.writerow([2, 3, 4])

古いソリューション(Python 2のみ)

Python 2の場合、'wb'モードを使用します( docs を参照)。

import csv
import os

with open('output.csv', 'wb') as f:
    writer = csv.writer(f, lineterminator=os.linesep)
    writer.writerow([2, 3, 4])

Python 2.(Python 3、これを使用している場合、これを使用している場合は、この投稿を見つけた他の人が'wb'問題はPythonによって処理されます。GNU/ Linuxのような一部のプラットフォームでは欠落していても問題に気付くことはありませんが、そのファイルを バイナリモード で開くことは重要です。 Windowsのように重要です。それ以外の場合、csvファイルは\r\r\nのような行末になる可能性があります。'wb'os.linesepを使用する場合、すべてのプラットフォームで行末が正しいはずです。

26
Don Kirkby