[Python3]open関数でファイルを開くと、改行コードが[CRLF]から[LF]に変換されてしまう

open関数の仕様です。newline 引数を指定すると自動変換をOFFにできます。

自動変換を無効にするには?

open関数の引数に「newline=''」を指定します。
with open('./crlf.txt', 'r', newline='') as file:
    for line in file:
        print(line)
注意:[None]では自動変換されてしまいます。['']を指定してください

newline 引数について

指定できる値は 「None, '', '\n', '\r', '\r\n'」 の5つで、その他の値はエラーが発生します。

newline 引数を省略、または [None] を指定した場合

'' を指定した場合

'\n', '\r', '\r\n' を指定した場合

newline に指定できる値と挙動
newline指定値 自動変換 行の分割単位
省略 '\n'に変換される '\n', '\r', '\r\n'
None '\n'に変換される '\n', '\r', '\r\n'
'' 自動変換なし '\n', '\r', '\r\n'
'\n' 自動変換なし '\n'
'\r' 自動変換なし '\r'
'\r\n' 自動変換なし '\r\n'
上記以外 エラー(ValueError: illegal newline value)

例1 CRLF('\r\n')のテキストファイル

line1'\r\n'
line2'\r\n'
line3'\r\n'

例2 LF('\n')のテキストファイル

line1'\n'
line2'\n'
line3'\n'

検証環境

関連ページ