2016-04-07 70 views
1

我在Windows 7如何將文本寫入使用Python 3以二進制模式打開的文件?

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

我碰到下面的錯誤運行與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' 

我的本意是寫在這樣的文件中的文本,所有'\n'顯示爲LF的文件中(而不是CRLF)。

我上面的代碼有什麼問題?將文本寫入以二進制模式打開的文件的正確方法是什麼?

回答

0

print()對傳遞給它的對象做了事情。避免將其用於二進制數據。

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

您不需要二進制模式。打開文件時指定換行符。默認值爲通用換行模式,將換行符轉換爲平臺默認值。 newline=''newline='\n'指定翻譯模式:

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()) 

輸出(在Windows上):

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

這是要'CRLF'在Windows,而不是寫'LF'。我想'LF'甚至可以在Windows上編寫。 –

+0

@LoneLearner你試過了嗎? Python 3是它自己的行處理,它使用這段代碼在Windows上只寫LF。我在Windows上並使用十六進制轉儲對其進行驗證。 –

+0

@LoneLearner補充證明。 –

相關問題