2010-12-04 17 views
2

Ich schreibe ein Python-Skript, das eine Textdatei verarbeitet. Ich erwarte, Dateien zu verarbeiten, die von verschiedenen Leuten stammen, die unter verschiedenen Betriebssystemen arbeiten. Gibt es eine gute Möglichkeit, herauszufinden, welches Betriebssystem die Textdatei erstellt hat, und die Zeilenende-Konvention anzugeben, um das Parsen Zeile für Zeile trivial zu machen?Python: End-of-Line-Format zum Lesen von Dateien angeben

Antwort

3

Verwenden Sie den universellen Newline-Modus beim Öffnen der Datei.

with open('input.txt', 'rU') as fp: 
    for line in fp: 
    print line 
2

splitlines() behandelt verschiedene Leitungsabschlüsse:

>>> 'foo\nbar'.splitlines() 
['foo', 'bar'] 
>>> 'foo\rbar'.splitlines() 
['foo', 'bar'] 
>>> 'foo\r\nbar'.splitlines() 
['foo', 'bar'] 
1

Wenn Sie dann nicht über die Beendigung Leerraum egal:

for line in [l.rstrip() for l in open('test.py').read().split('\n')]: 
    print line 

'\ n' Pflege von Linux/Mac nehmen und rstrip essen irgendein '\ r' von Windows herauf.

+0

Das bin ich einen Fehler gibt: Attribute: ‚Liste‘ Objekt hat kein Attribut ‚rstrip‘ – ajwood

+0

Sorry, versuchen Sie es jetzt. –

+0

Mauahah hat es geschafft! Ich musste die Aufteilung ('\ n') jedoch aufteilen ('\ r'). Vielen Dank! – ajwood

1

Sie möchten file.readlines() verwenden, die eine Liste zurückgibt, die die Zeilen in der Datei enthält.

lines = open('info.txt').readlines() 
for line in lines: 
    print line 

finden Sie in der Dokumentation auf Python file objects.