2010-12-31 14 views
2

In Python 2.6 und 2.7 Ich hätte gedacht, dass diese beiden Konstrukte identisch sein würden:Looping durch eine Textdatei, Readline-() Konstruktion nicht auf große Dateien

Methode A

i=0 
f=open('fred.txt','r') 
for line in f.readline(): 
    i+=1 
print i 

Methode B

i=0 
f=open('fred.txt','r') 
for line in f: 
    i+=1 
print i 

wenn jedoch wuchs fred.txt 74.000 Linien zu sein, mit EA ch-Linie 2.684 Zeichen Länge, Methode A druckt 2685, während Methode B 74000 druckt. Offensichtlich Methode B wird bevorzugt, aber warum funktioniert Methode A für kleine Dateien, aber für große Dateien fehlschlagen?

Antwort

15

Es gibt einen Tippfehler, es sollte f.readlines() sein. Sie lesen eine Zeile und durchlaufen jedes Zeichen in der Zeile.

Beide Methoden (readlines vs Iterieren über die Datei direkt) sollte die gleichen Ergebnisse geben, aber readlines wird den gesamten Inhalt im Speicher gespeichert.

+0

Im Rückblick auf den Bearbeitungsverlauf wurde ursprünglich readlines() verwendet, aber in readline geändert, um das Lesen der gesamten Datei in den Speicher zu vermeiden. Dummer Fehler, der hätte beim Testen erwischt werden sollen. Danke für die schnelle Antwort. – WombatPM

+0

Also, um klar zu sein, Iterieren über die Datei (nicht readlines()) wird nur eine Zeile auf einmal zu lesen sein? Meine Datei ist 26 GB> 12 GiB Speicher ... – Dubslow

+0

@Dubslow Korrekt. –