Wie kann ich mit Python (unter Windows) in Dateien schreiben und das Unix-Zeilenendezeichen verwenden?
zB wenn:
f = open ('file.txt', 'w') f.write ('Hallo \ n') f.close ()
Python ersetzt automatisch \n
mit \r\n
.
Antworten:
Siehe: Die moderne Art: Verwenden Sie auf dieser Seite newline = '' answer.
Öffnen Sie die Datei als Binärdatei, um die Übersetzung von Zeilenendezeichen zu verhindern:
f = open('file.txt', 'wb')
Zitieren des Python-Handbuchs:
Unter Windows öffnet 'b', das an den Modus angehängt ist, die Datei im Binärmodus, daher gibt es auch Modi wie 'rb', 'wb' und 'r + b'. Python unter Windows unterscheidet zwischen Text- und Binärdateien. Die Zeilenendezeichen in Textdateien werden beim Lesen oder Schreiben von Daten automatisch geringfügig geändert. Diese Änderung der Dateidaten hinter den Kulissen ist für ASCII-Textdateien in Ordnung, beschädigt jedoch Binärdaten wie die in JPEG- oder EXE-Dateien. Achten Sie beim Lesen und Schreiben solcher Dateien sehr darauf, den Binärmodus zu verwenden. Unter Unix tut es nicht weh, ein 'b' an den Modus anzuhängen, sodass Sie es plattformunabhängig für alle Binärdateien verwenden können.
Verwenden Sie den newline=
Schlüsselwortparameter to io.open () , um LF-End-of-Line-Terminatoren im Unix-Stil zu verwenden:
import io
f = io.open('file.txt', 'w', newline='\n')
Dies funktioniert in Python 2.6+. In Python 3 können Sie stattdessen auch open()
den newline=
Parameter der integrierten Funktion verwenden io.open()
.
Die alte Methode zum Verhindern der Zeilenumbruchkonvertierung, die in Python 3 nicht funktioniert, besteht darin, die Datei im Binärmodus zu öffnen , um die Übersetzung von Zeilenendezeichen zu verhindern:
f = open('file.txt', 'wb') # note the 'b' meaning binary
In Python 3 liest der Binärmodus jedoch Bytes und keine Zeichen, sodass er nicht das tut, was Sie wollen. Sie werden wahrscheinlich Ausnahmen bekommen, wenn Sie versuchen, String-E / A im Stream auszuführen. (zB "TypeError: 'str' unterstützt die Pufferschnittstelle nicht").
'\n'
direct setzen, dies ist expliziter als ''
und ich denke, es ist einfacher, es zu lesen.
'\n'
ist klarer als ''
. Dann brauche ich keinen Kommentar, um zu erklären, was der Code tut :) Aber sei dir bewusst, dass dies nur für das Schreiben von Dateien gilt. Beim Lesen von Dateien newline='\n'
ist dies nicht genau das Gleiche wie newline=''
, da readlines()
nur \n
im ersteren Fall geteilt wird, aber newline=''
damit eine universelle Newline-Behandlung durchgeführt wird, aber dennoch die tatsächlichen Newlines aus der Datei in den Daten zurückgegeben werden. Danke für den Vorschlag! Python-Testprogramm
'\n'
, dass Sie dasselbe sehen , das zuvor umgeschaltet wurde, können Sie den Unicode-Codepunkt verwenden (stellen Sie sicher, dass die Codierung utf-8 oder etwas anderes kompatibles ist). with open('file.txt', 'w', encoding='utf-8', newline='\u000A')
;; PS Das Ergebnis unterscheidet sich nicht von der newline='\n'
Version. Dies ist nur, wenn jemand mehr Komfort wünscht.
Sie müssen den binären Pseudomodus verwenden, wenn Sie die Datei öffnen.
f = open('file.txt', 'wb')