2016-04-08 15 views
0

Für Python in Windows-Umgebung
Ich habe eine Protokolldatei, die [CR] [LF] als Ende der Zeile verwendet.Python, lesen beide Ende der Zeile Zeichen [CR] [LF]

Aber Python liest nur das [LF] Zeichen (\ x0A) als '\ n'
[CR] oder '\ x0d' wird irgendwie ignoriert. Len() der gelesenen Zeichenfolge wird dadurch um 1 reduziert.

Gibt es irgendwo eine universelle/lokale Einstellung, die ich Python sagen kann, um das zu vermeiden?

Antwort

2

In Python 2, open die Datei in Binär-Modus zu vermeiden Linie Übersetzung endet:

with open(filename, 'rb') as f: 

In Python 3, Binär-Modus viel mehr als nur deaktivieren Linie tut endet Übersetzung (es bedeutet auch bytes statt Lesen von str), so verwenden Sie stattdessen Sie the newline keyword argument deaktivieren Linie Übersetzung endet (durch den leeren String übergeben):

with open(filename, newline='') as f: 
+0

Sie diese Optionen deaktivieren Leselinie insgesamt durch die Linie? –

+0

@MarkRansom: Nein, sie deaktivieren nur die Zeilenende-Übersetzung. Ich glaube, dass der binäre Modus in Python 2 '\ n' als das einzige Zeilenumbruchzeichen betrachtet, während in' Python3 '' newline = '' 'bedeutet, dass der universelle Zeilenumbruchmodus verwendet wird, um Zeilenumbrüche zu erkennen (also alle üblichen Zeilenumbrüche) Standards zählen als Zeilenumbruch), aber lassen sie nicht übersetzt (Sie erhalten die ursprünglichen Zeichen, was auch immer sie waren). – ShadowRanger

Verwandte Themen