Pandas: DataFrame.to_csv() の改行コードを制御
#CSV を出力してみたら、OSによって #LF だったり #CRLF だったりするので、どうやったらOSによらず制御できるのか、調べた。 動機
Python(pandas)で出力した結果と、検証用データとの差分比較で、OSが違うと改行コードの差異が検出されてしまってうざい
結論
DataFrame.to_csv('file.csv') の場合、CSVの改行コードはOSに依存する。
code:before.py
df.to_csv('file.csv')
# encoding 未指定の場合、内部で'utf-8'が選択される
# line_terminator 未指定の場合、改行コードは \n が選択されるが、 \n はファイル書き出し時に os.linesep に変換される
DataFrame.to_csv(open('file.csv', 'w', newline='')) の場合、CSVの改行コードはLF(\n)固定
code:sample.py
with open('file.csv', 'w', newline='', encoding='utf-8') as f:
df.to_csv(f)
以下、試行錯誤
df.to_csv('file.csv', line_terminator='\n\n') にしてみた
Macでは LFLF で書き出された
Windows 10では CRLFCRLF で書き出された..
正しいCSVの改行コードは?
結論: どちらでもよい
RFC-4180 で共通仕様がまとめられているけれど、各OSのツールの方が歴史が長い