imadedede のブログ

今出川潤の出張所。

Python3 の csv.writer で改行コードを LF にしたいときは lineterminator を変更する

ここ読んで見つけた。

stackoverflow.com

使用環境は LinuxMint 19.1 tessa で Python3.6.8。

デフォルトの csv.writer の改行コードは CR/LF で出力される

例えば以下のようなコードがある。

import csv

with open('hoge.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['one', 'two', 'three'])

Python3 の標準ライブラリを使った簡単な CSV 書き出しコードだが、これでそのまま書き出すと改行コードは CR/LF になる(Excel 互換のため?)。これを LF にしたい。しかし公式ドキュメントでは newline='' を使えと書いてある。ではどうするか。

lineterminator='\n' を指定して LF に変更する

以下のように lineterminator という終端処理パラメータを変更する(ドキュメントはこちら)。

import csv

with open('hoge.csv', 'w', newline='') as f:
    writer = csv.writer(f, lineterminator='\n') # LF にしたいので '\n' を指定する。
    writer.writerow(['one', 'two', 'three'])

これで改行コードが LF の CSV ファイルが出力される。