web-dev-qa-db-ger.com

Wann sollte ich file.read () oder file.readlines () verwenden?

Ich habe bemerkt, dass, wenn ich über eine Datei iteriere, die ich geöffnet habe, es viel schneller ist, sie ohne "Lesen" zu iterieren. 

d.h. 

l = open('file','r')
for line in l:
    pass (or code)

ist viel schneller als 

l = open('file','r')
for line in l.read() / l.readlines():
    pass (or code)

Die 2. Schleife dauert etwa 1,5x so viel Zeit (ich habe die Zeit für dieselbe Datei verwendet und die Ergebnisse waren 0.442 vs. 0.660) und würde dasselbe Ergebnis liefern. 

Also - wann sollte ich jemals die .read () oder .readlines () verwenden? 

Da ich immer die Datei durchlaufen muss, lese ich, und nachdem ich gelernt habe, wie schwer es ist, das .read () auf große Daten zu verlangsamen, kann ich mir nicht vorstellen, es jemals wieder zu verwenden. 

13
David Refaeli

Die kurze Antwort auf Ihre Frage ist, dass jede dieser drei Methoden zum Lesen von Bits einer Datei unterschiedliche Anwendungsfälle hat. Wie bereits erwähnt, liest f.read () die Datei als einzelne Zeichenfolge und ermöglicht so relativ einfache, dateiweite Manipulationen, z. B. eine rexexpezifische Suche oder Ersetzung.

f.readline () liest eine einzelne Zeile der Datei, sodass der Benutzer eine einzelne Zeile analysieren kann, ohne die gesamte Datei lesen zu müssen. Die Verwendung von f.readline () ermöglicht auch eine einfachere Anwendung der Logik beim Lesen der Datei als eine vollständige zeilenweise Wiederholung, z. B. wenn eine Datei das Format teilweise ändert.

Mit der Syntax for line in f: kann der Benutzer die Datei zeilenweise durchlaufen, wie in der Frage angegeben.

(Wie in der anderen Antwort erwähnt, ist diese Dokumentation eine sehr gute Lektüre):

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

EDIT: Es wurde zuvor behauptet, dass readline () verwendet werden kann, um eine Zeile während einer for-Schleife-Iteration zu überspringen. Dies funktioniert jedoch nicht in Python 2.7 und ist möglicherweise eine fragwürdige Praxis, daher wurde diese Behauptung gestrichen.

EDIT: Ein Beispiel für einen Anwendungsfall von f.readline () und f.read () wurde hinzugefügt. 

9
Checkmate

Hoffe das hilft!

https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

Wenn size nicht angegeben oder negativ ist, wird der gesamte Inhalt der Datei gelesen und zurückgegeben. Es ist Ihr Problem, wenn die Datei doppelt so groß ist wie der Arbeitsspeicher Ihres Computers

Entschuldigung für alle Änderungen!

Um Zeilen aus einer Datei zu lesen, können Sie das Dateiobjekt durchlaufen. Dies ist speichereffizient, schnell und führt zu einfachem Code:

for line in f:
    print line,

This is the first line of the file.
Second line of the file
0
Rudi