2009-11-23 4 views
18

In Python, eine Datei lesen und seine Zeilen in eine Liste laden, indemConvert r Text n so readlines() funktioniert sollte als

f = open('file.txt','r') 
lines = f.readlines() 

Jede einzelne Zeile von \n mit begrenzt ist, aber wenn Der Inhalt einer Zeile hat \r dann wird es nicht als eine neue Zeile behandelt. Ich muss alle \r zu \n umwandeln und die korrekte Liste lines erhalten.

Wenn ich .split('\r') innerhalb der lines mache, bekomme ich Listen in der Liste.

Ich dachte, eine Datei zu öffnen, ersetzen Sie alle \r zu \n, um die Datei zu schließen und es wieder ein und verwenden Sie dann den readlines() aber dies scheint verschwenderisch zu lesen.

Wie soll ich das umsetzen?

+0

Eigentlich, wenn Sie eine Mischung aus '\ n 'und' \ r' Zeilenumbrüchen haben, und wenn dieser innerhalb auftreten die "echten" Zeilen getrennt durch '\ n', dann erscheint mir die Liste innerhalb der Liste als die richtige Sache. –

Antwort

44
f = open('file.txt','rU') 

Dies öffnet die Datei mit Python universal newline support und \r wird als End-of-line behandelt.

+3

... obwohl diese Funktion veraltet ist und nicht in neuem Code gemäß der Python-Dokumentation verwendet werden sollte. –

+0

Danke! Dies funktioniert wie vorgesehen und ist ausreichend für mich. Tim, was wäre der richtige Weg, es jetzt zu tun? – greye

+3

In Python 3.x ist die universelle Newline-Unterstützung standardmäßig aktiviert, sodass Sie nichts tun müssen. –

3

Wenn es ein Anliegen, offen im binären Format und konvertiert mit diesem Code:

from __future__ import with_statement 

with open(filename, "rb") as f: 
    s = f.read().replace('\r\n', '\n').replace('\r', '\n') 
    lines = s.split('\n')