Windows上でPythonを実行した際、出力ファイルの改行コードが勝手にCRLFに変更されます。
環境
- Windows 10 Enterprise
- Python 3.5.2
CRLFに改行コードが変わる
Windows上でPythonからファイル書き込みを行った場合、デフォルトでは改行コードが強制的にCRLFに変更されます。
outputFile='./test.txt'
with open(outputFile,'w') as fo:
fo.write('hello world !\n')
上記のプログラムでは改行に\n
を使用し、プログラム中では紛れもなく改行コードはLFです。しかし、実行し書き出されたファイルは以下のようになっており、何故か改行がCRLFになっています。
対策
改行コードを変更されないためには、ファイルを開く際に改行コードを指定する必要があります。newline
はファイルの改行コードを指定する引数です。
outputFile='./test.txt'
with open(outputFile,'w',newline="\n") as fo:
fo.write('hello world !\n')
実行結果は下のようになり、しっかりと改行コードがLFになっていることが確認できます。
おまけ:csvモジュールを使った場合
csv形式のファイルを扱うためのcsvモジュールには、書き込みファイルの改行コードを指定する引数が存在します。これを使った場合どうなるのか調べました。
import csv
outputFile='./test.txt'
with open(outputFile,'w') as fo:
writer=csv.writer(fo,lineterminator='\n')
writer.writerow(['hello','world','!'])
writer.writerow(['hello','world','!'])
lineterminator
で改行コードを\n
に指定しますが……。
うーん、残念ながら無力。
それどころか、ファイルを開く際のnewline
とcsv形式の指定lineterminator
の両方で改行コードを指定しなければ、LF改行になりませんでした。