web-dev-qa-db-ja.com

Pythonを使用して、WindowsでUnixの行末文字を書く方法

Python(Windows))を使用してファイルに書き込み、Unixの行末文字を使用するにはどうすればよいですか?

例えば行うとき:

 f = open( 'file.txt'、 'w')
 f.write( 'hello\n')
 f.close()

Pythonは、\ nを\ r\nに自動的に置き換えます。

67
tttppp

Python 2&3

参照: 最新の方法:newline = ''を使用 このページで答えてください。

Python 2のみ(元の回答)

ファイルをバイナリとして開き、行末文字の翻訳を防ぎます。

f = open('file.txt', 'wb')

Pythonマニュアル:

Windowsでは、モードに「b」を追加すると、ファイルがバイナリモードで開かれるため、「rb」、「wb」、「r + b」などのモードもあります。 Pythonは、テキストファイルとバイナリファイルを区別します。テキストファイルの行末文字は、データの読み取りまたは書き込み時に自動的にわずかに変更されます。 ASCIIテキストファイルのファイルデータは問題ありませんが、JPEGまたはEXEファイルのようなバイナリデータは破損します。このようなファイルの読み取りと書き込みを行うときは、バイナリモードを使用してください。モードに「b」を追加しても問題はないため、すべてのバイナリファイルに対してプラットフォームに依存せずに使用できます。

59
Tamás

最新の方法:newline = ''を使用

__ io.open() に_newline=_キーワードパラメータを使用して、UnixスタイルLF行末ターミネータを使用します。

_import io
f = io.open('file.txt', 'w', newline='\n')
_

これはPython 2.6+で動作します。Python 3では、組み込みのopen()関数の_newline=_パラメータを使用することもできますio.open()

古い方法:バイナリモード

Python 3では機能しない改行の変換を防ぐ古い方法は、binaryでファイルを開くことです。行末文字の翻訳を防ぐモード:

_f = open('file.txt', 'wb')    # note the 'b' meaning binary
_

しかしPython 3では、バイナリモードはbytesを読み取り、characters必要な処理を行いません。ストリームで文字列I/Oを実行しようとすると、おそらく例外が発生します(たとえば、「TypeError: 'str'はバッファをサポートしません」インタフェース")。

78
Colin D Bennett

ファイルを開くときは、バイナリ擬似モードを使用する必要があります。

f = open('file.txt', 'wb')
8