web-dev-qa-db-ja.com

Pythonのfile.write()がWindowsでLinuxと同じ改行形式(「\ r \ n」と「\ n」)を使用するように強制するにはどうすればよいですか?

私は簡単なコードを持っています:

f = open('out.txt','w')
f.write('line1\n')
f.write('line2')
f.close()

コードはWindows上で実行され、ファイルサイズは12 bytesになり、Linuxは11 bytesになります。理由は改行です

Linuxでは\nであり、勝つためには\r\nです。

しかし、私のコードでは、\nとして改行を指定しています。問題は、pythonを常に\nとして保持し、オペレーティングシステムをチェックしないようにする方法です。

59
user1148478

ファイルをバイナリモードで開く必要があります。つまり、wbではなくwです。そうしないと、行末文字がOS固有の文字に自動的に変換されます。

open() に関するPythonリファレンスからの抜粋です。

デフォルトでは、テキストモードを使用します。このモードでは、書き込み時に「\ n」文字をプラットフォーム固有の表現に変換し、読み取り時に戻すことができます。

92

あなたはまだテキストモードを使用し、キーワード引数newlineでline-newlineを強制することができます

f = open("./foo",'w',newline='\n')

Python 3.4.2でテスト済み。

編集:これはPython 2.7では機能しません。