30
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows上で実行したPythonの出力ファイルの改行コードが変わる

Posted at

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になっています。
新しいビットマップ イメージ.png

対策

改行コードを変更されないためには、ファイルを開く際に改行コードを指定する必要があります。newlineはファイルの改行コードを指定する引数です。

outputFile='./test.txt'

with open(outputFile,'w',newline="\n") as fo:
    fo.write('hello world !\n')

実行結果は下のようになり、しっかりと改行コードがLFになっていることが確認できます。
pic2.png

おまけ: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に指定しますが……。
pic3.png
うーん、残念ながら無力。
それどころか、ファイルを開く際のnewlineとcsv形式の指定lineterminatorの両方で改行コードを指定しなければ、LF改行になりませんでした。

参考サイト

30
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?