Sowohl aus Python2 Tutorial als auch Python3 Tutorial , es gibt eine Zeile im Mittelpunkt von Abschnitt 7.2.1 sagen:
Wenn Sie alle Zeilen einer Datei in einer Liste lesen möchten, können Sie auch
verwendenlist(f)
oderf.readlines().
Meine Frage ist also: Was ist der Unterschied zwischen diesen beiden Möglichkeiten, ein Dateiobjekt in eine Liste zu verwandeln? Ich bin sowohl im Performance-Aspekt als auch in der Python-Objekt-Implementierung (und vielleicht auch im Unterschied zwischen Python2 und Python3) neugierig.
Funktionell gibt es keinen Unterschied; Beide Methoden führen zu genau derselben Liste.
Zur Implementierung verwendet man das Dateiobjekt als Iterator (ruft next(f)
wiederholt auf bis StopIteration
ausgelöst wird, verwendet der andere eine dedizierte Methode, um die ganze Datei zu lesen.
Python 2 und 3 unterscheiden sich genau darin, ob Sie io.open()
.readline()
oder .readlines()
-Aufrufe mischen.
Die io
-Bibliothek (die alle Datei-I / O in Python 3 verarbeitet) verwendet keinen solchen versteckten Puffer, die gesamte Pufferung wird stattdessen von einem BufferedIOBase()
Wrapper-Klasse . Tatsächlich verwendet die io.IOBase.readlines()
-Implementierung das Dateiobjekt als Iterator unter der Haube sowieso und TextIOWrapper
Iteration delegierte an TextIOWrapper.readline()
, also sind list(f)
und f.readlines()
im Grunde die gleichen Dinge, wirklich.
Im Hinblick auf die Performance gibt es auch in Python 2 keinen wirklichen Unterschied, da der Flaschenhals Datei-I / O ist; Wie schnell können Sie es von der Festplatte lesen? Auf einer Mikroebene kann die Leistung von anderen Faktoren abhängen, z. B. wenn das Betriebssystem die Daten bereits gepuffert hat und wie lange die Leitungen sind.
Tags und Links python file-io list file python-internals