2016-04-07 13 views
1

ich den folgenden Code mit Python 3.5.1 auf Windows 7.Wie schreibe ich Text in eine Datei, die mit Python 3 im Binärmodus geöffnet wurde?

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

ich folgende Fehlermeldung erhalten.

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' 

Meine Absicht ist, Text in einer Datei zu schreiben, so dass alle '\n' als LF erscheint in der Datei (im Gegensatz zu CRLF Gegensatz).

Was ist falsch in meinem Code oben? Was ist der richtige Weg, um Text in eine Datei zu schreiben, die im Binärmodus geöffnet ist?

Antwort

0

print() wird Dinge an das Objekt übergeben. Vermeiden Sie es für Binärdaten.

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

Sie benötigen keinen Binärmodus. Geben Sie den Zeilenumbruch beim Öffnen der Datei an. Der Standard ist der universelle Newline-Modus, der Zeilenumbrüche in den/aus dem Standard der Plattform übersetzt. newline='' oder newline='\n' gibt unübersetzt Modus:

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

Ausgabe (unter Windows):

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

, die unter Windows statt dem Schreiben 'LF' zu' CRLF' wird. Ich möchte 'LF' auch unter Windows schreiben. –

+0

@LoneLearner hast du es versucht? Python 3 hat eine eigene Zeilenverarbeitung und schreibt mit diesem Code nur LF unter Windows. Ich bin auf Windows und verifiziert es mit einem Hex-Dump. –

+0

@LoneLearner Zusätzlicher Nachweis. –