2016-04-07 6 views
1

私は次のエラーを取得するPython 3を使用してバイナリモードで開いたファイルにテキストを書き込む方法は?

with open('foo.txt', 'wb') as f: 
    print(b'foo\nbar\n', file=f) 

7. Windows上のPython 3.5.1で、次のコードを実行します。

Traceback (most recent call last): 
    File "foo.py", line 2, in <module> 
    print(b'foo\nbar\n', file=f) 
TypeError: a bytes-like object is required, not 'str' 

私の意図は、ファイル内(CRLFではなく)すべての'\n'がLFとして表示されるように、ファイル内のテキストを書くことです。

上記のコードで何が問題になっていますか?バイナリモードで開いたファイルにテキストを書き込む正しい方法は何ですか?

答えて

0

print()渡されたオブジェクトに対する処理を行います。バイナリデータには使用しないでください。

f.write(b'foo\nbar\n') 
0

バイナリモードは必要ありません。ファイルを開くときに改行を指定します。デフォルトはユニバーサル改行モードです。これは、改行をプラットフォームのデフォルトに/から変換します。 (Windowsの場合)

with open('foo.txt', 'w', newline='\n') as f: 
    print('foo', file=f) 
    print('bar', file=f) 

with open('bar.txt', 'w', newline='\r') as f: 
    print('foo', file=f) 
    print('bar', file=f) 

with open('foo.txt','rb') as f: 
    print(f.read()) 

with open('bar.txt','rb') as f: 
    print(f.read()) 

出力:

b'foo\nbar\n' 
b'foo\rbar\r' 
+0

Windows上で 'CRLF'の代わりに、' LF'を書くために起こっているnewline=''またはnewline='\n'は、非翻訳モードを指定します。 Windows上でも 'LF'を書いて欲しいです。 –

+0

@LoneLearner試しましたか? Python 3はそれ自身の行処理であり、このコードでWindowsにLFのみを書き出します。私はWindows上にあり、16進ダンプを使って検証しました。 –

+0

@LoneLearner証明を追加しました。 –

関連する問題