動作環境
Windows 10 Pro v1809
Anaconda v2019.03
Jupyter Notebook v5.7.8
Python v3.7.3
概要
- CR, LF付文字列をwrite()したときにCR, CR, LFとして書出される
コード
with open('test_190603.txt', 'w') as wfp:
wfp.write("AAAA" + "\r\n")
wfp.write("AAAA" + "\r\n")
wfp.write("AAAA" + "\r\n")
出力ファイルの構造
windows > バイナリエディタ > 構造体の情報を得る
にある
Binary Editor BZで確認
CR(0x0D)が余分にある。
関連
下記(2016年の情報)に近い症状のようだ。
バイナリ書出しで対処されている。
不可解な点
- もともとCR,LF付の文字列をreadline()してからwrite()した時には余分なCRはつかない
- CR, LFをつけた文字列をwrite()した時に余分なCRがつく
備考
- open()時のnewline指定では解消しなかった
対処
文字列 + CR, LF
ではなく
文字列 + LF
でwrite()すると
文字列 + CF, LF
として書込まれた。
ただし、将来Pythonのバージョンが上がったときに不具合修正がされると、振舞いが変わるだろう。
仕様通り
(追記 2019-06-03)
@c-yan さんのコメントにてPythonの仕様について言及されています。
仕様書通りなのですね。
情報感謝です。
ファイル読書き
Windowsにおいて、CR, LFのファイルに対して下記となる。
- 読込み: CR, LFはLFに変換
- 書出し: LFはCR, LFに変換