Die os.linesep
wird verwendet, wenn Sie die Zeilen einer Textdatei durchlaufen möchten. Der interne Scanner erkennt die os.linesep
und ersetzt sie durch ein einziges "\ n".
Zur Veranschaulichung, schreiben wir eine binäre Datei, die durch "\ r \ n" (Windows delimiter) 3 getrennt Zeilen enthält:
import io
filename = "text.txt"
content = b'line1\r\nline2\r\nline3'
with io.open(filename, mode="wb") as fd:
fd.write(content)
Der Inhalt der Binärdatei ist:
with io.open(filename, mode="rb") as fd:
for line in fd:
print(repr(line))
Hinweis: Ich habe den "rb" -Modus verwendet, um die Datei als Binärdatei zu lesen.
ich:
b'line1\r\n'
b'line2\r\n'
b'line3'
Wenn ich den Inhalt der Datei mit dem Textmodus wie folgt lesen:
with io.open(filename, mode="r", encoding="ascii") as fd:
for line in fd:
print(repr(line))
ich:
'line1\n'
'line2\n'
'line3'
Der Begrenzer wird durch "\ n" ersetzt.
Die os.linesep
wird auch im Schreibmodus verwendet: beliebig "\ n" Zeichen an den System-Standardzeilentrenn umgewandelt werden: "\ r \ n" unter Windows "\ n" auf POSIX usw.
Mit der Funktion io.open
können Sie den Zeilentrenner beliebig setzen.
Beispiel: wie man eine Windows-Textdatei schreiben:
with io.open(filename, mode="w", encoding="ascii", newline="\r\n") as fd:
fd.write("one\ntwo\nthree\n")
Wenn Sie diese Datei im Textmodus wie folgt lesen:
with io.open(filename, mode="rb") as fd:
content = fd.read()
print(repr(content))
Sie erhalten:
b'one\r\ntwo\r\nthree\r\n'
Es wouldn Funktioniert nicht, wenn die Codierung inkompatibel ist. 'len ('\ n'.encode (' utf-16 '))' ist 4 –