2014-02-07 3 views
13

Python 2.7 documentation (und Python 3 documentation auch) enthalten die folgende Zeile über die os.linepath Funktion:Warum sollten Sie os.linesep nicht verwenden, wenn Sie im Textmodus bearbeiten?

nicht os.linesep als Zeilenendzeichen verwendet beim Schreiben von Dateien im Textmodus (Standardeinstellung) geöffnet;

Warum ist das? Und wie unterscheidet es sich von der Verwendung im Binärmodus?

+2

@mhlester sie es nicht erklären, weil es ein unnötiges Implementierungsdetail ist. Wenn die Datei geschrieben wird, werden alle '\ n' basierend auf Ihrem Betriebssystem in' os.linesep' konvertiert. Wenn die Datei gelesen wird, werden alle auf Ihrem Betriebssystem basierenden "os.linesep" in "\ n" konvertiert. –

+2

@AdamSmith: Wenn es ein "unnötiges Implementierungsdetail" ist, warum sollte es erwähnt werden? Wenn Sie es erwähnen müssen, weil die Leute das Falsche tun und dies zu viel Verwirrung verursacht, können Sie auch das Implementierungsdetail erklären und warum sollten Sie es nicht benutzen ... – dangonfast

Antwort

17

Wenn Sie eine Datei im Textmodus öffnen, wird jede \n, die Sie in die Datei schreiben, in die entsprechende Zeilenendung für die von Ihnen verwendete Plattform konvertiert.

zum Beispiel Also, wenn Sie auf Windows sind, wo os.linesep'\r\n' sind, wenn Sie in eine Datei schreiben, dass die \n automatisch auf \r\n konvertiert werden, und Sie werden mit \r\r\n geschrieben Dateien landen.

Zum Beispiel:

>>> import os 
>>> os.linesep 
'\r\n' 
>>> with open('test.txt', 'w') as f: 
...  f.write(os.linesep) 
... 
>>> with open('test.txt', 'rb') as f: 
...  print repr(f.read()) 
... 
'\r\r\n' 
Verwandte Themen