2017-11-14 2 views
3

Ich benutze Python 3.6.3 unter Windows. Wenn ich versuche, eine einzelne mehrzeilige Zeichenfolge zu drucken, wie diese Datei:Warum wird eine mehrzeilige Zeichenfolge beim Drucken oder Schreiben geändert? (Python 3.6 unter Windows)

with open('test1.txt', mode='w') as f: 
    f.write('test\r\ntest\r\n') 

Dann test1.txt wird bis enthält test\r\r\ntest\r\r\n statt test\r\ntest\r\n beenden.

Eine Abhilfe zu bekommen die gewünschte Ausgabe wie so aussehen:

with open('test2.txt', mode='w') as f: 
    for line in 'test\r\ntest\r\n'.splitlines(): 
     print(line, file=f) 

Warum ist das passiert

?

+0

Sie sollten nicht die '' s in sich setzen. Der Textmodus übersetzt das für Sie. – user2357112

+0

Ja, ich weiß, dass ich das nicht tun sollte. In meinem Fall bekomme ich die Zeichenfolge jedoch in einem Rutsch von 'tablib.tsv'. –

+0

Warum 'mode = 'w'' anstelle von' mode =' wb'', wenn Sie möchten, dass Ihre Daten wörtlich geschrieben werden? –

Antwort

1

Nun dreht sich richtig eine Frage unter Angabe aus führt oft zur Antwort präsentiert sich:

Der Grund für dieses Verhalten ist universal newline mit Python gefunden werden (unter Angabe von PEP 3116 auf TextIOWrapper):

Wenn newlineNone ausgegeben wird, werden alle geschriebenen '\n' Zeichen in das Standard-Zeilentrennzeichen des Systems übersetzt, os.linesep. Wenn newline '' ist, findet keine Übersetzung statt. Wenn Newline eine der anderen zulässigen Werte ist, werden alle geschriebenen '\n' Zeichen in die angegebene Zeichenfolge übersetzt. (. Man beachte, dass die Regeln Übersetzung Führungs unterschiedlich sind für die Ausgabe als eingabe)

Das heißt, wenn die Datei zum Schreiben geöffnet wird, die newline Parameter können auf '' eingestellt werden, um die gewünschte Ausgabe zu erzielen:

with open('test3.txt', mode='w', newline='') as f: 
    f.write('test\r\ntest\r\n') 
Verwandte Themen