Ist in Python read () oder readlines () schneller?
Ich Lesen möchte eine große Datei in meinem code. Ist read() oder readline() schneller. Wie über die Schleife:
for line in fileHandle
InformationsquelleAutor der Frage Programmer | 2011-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine text-Datei iteriert es mit einem
for
loop ist fast immer der Weg zu gehen. Mach dir keine sorgen um Geschwindigkeit, es ist das sauberste.In einigen Versionen von python
readline()
wirklich nur Lesen einer einzigen Zeile während derfor
Schleife liest große Stücke und teilt Sie in Zeilen, so kann es schneller sein. Ich denke, dass neuere Versionen von Python verwenden Sie die Pufferung auch fürreadline()
so der performance Unterschied wird Minuskel (for
ist wohl noch mikroskopisch schneller, weil es vermeidet eine Methode aufrufen). Aber die Wahl einen über den anderen aus performance-Gründen wird wohl vorzeitige Optimierung.Bearbeiten, um hinzuzufügen: ich habe gerade überprüft wieder durch einige Python release notes. Python 2.5, sagte:
Python 2.6 eingeführt TextIOBase unterstützt beide Durchlaufen und
readline()
gleichzeitig.Python 2.7 behoben interleaving
read()
undreadline()
.InformationsquelleAutor der Antwort Duncan
Wenn die Datei riesig ist, read() ist definitevely schlechte Idee, wie es lädt (ohne size-parameter), die ganze Datei in den Speicher.
Readline-liest nur eine Zeile zur Zeit, also ich würde sagen, dass ist die bessere Wahl für große Dateien.
Und nur die Iteration über file-Objekt sollte so effektiv wie mit readline.
Sehen http://docs.python.org/tutorial/inputoutput.html#methods-of-file-objects für mehr info
InformationsquelleAutor der Antwort ts.
Den docs für readlines anzuzeigen, gibt es eine optionale sizehint. Weil es so vage ist, ist es leicht zu übersehen, aber ich fand, dass dies oft der Schnellste Weg, Dateien zu Lesen. Verwenden readlines(1), Hauch einer Linie, aber in der Tat liest sich in etwa 4k oder 8k lohnt der Linien IIRC. Dieser nutzt das OS Pufferung und reduziert die Zahl der Anrufe etwas, ohne eine übermäßige Menge an Speicher.
Können Sie Experimentieren mit verschiedenen Größen der sizehint, aber ich fand 1 optimal zu sein auf meiner Plattform war, wenn ich die Prüfung dieses
InformationsquelleAutor der Antwort John La Rooy
Wenn Sie genug Speicher haben, verwenden readline wenn die Leistung sorgen. Ich habe gesehen, dass, während Sie eine gzip-Datei zu tun:
read().split('\n')
dauerte 5 Sekunden Durchlaufen wird, in der Erwägung, dass die Verwendung der iterator dauerte 38 Sekunden. Die Größe der GZ-Datei war um die 45 MB.InformationsquelleAutor der Antwort Pranshu
read() ist im Grunde versucht zu Lesen die gesamte Datei, und speichern Sie es in eine einzelne Zeichenfolge, die später verwendet werden, während readlines() ist auch zu Lesen versucht, die ganze Datei, sondern es wird eine split("\n") und speichern Sie die Zeichenfolgen von Zeilen in eine Liste. Daher sind diese beiden Methoden nicht bevorzugt, wenn die Dateigröße übermäßig groß.
readline () - und for-Schleife (i ist.e.for Zeile in Datei:) Lesen einer Zeile zu einem Zeitpunkt und speichert es in einen string. Ich denke, Sie wird die gleiche Zeit, um den job zu beenden, wenn der Speicher ermöglicht. Aber diese zwei sind bevorzugt, wenn die Größe der Datei ist riesig.
InformationsquelleAutor der Antwort Steve Deng Zishi
Wenn Sie Ihre Datei ist eine text-Datei, dann verwenden Sie readlines() und das ist offensichtlich der Weg zum Lesen-Datei mit Linien. Davon abgesehen, führen Sie die benchmarks, wenn Sie sind wirklich bewusst, mögliche performance-Probleme. Ich bezweifle, dass Sie irgendwelche Probleme....die Geschwindigkeit des Dateisystems sollte der limitierende Faktor.
InformationsquelleAutor der Antwort Andreas Jung
Ist der eigentliche Unterschied zwischen read() und readlines()
Die read-Funktion lädt einfach die Datei wie Sie ist in den Speicher.
Die readlines-Methode liest die Datei als eine Liste von Zeilen ohne leitungsabschluss.
Die readlines-Methode sollte nur verwendet werden, die auf text-Dateien, und Sie sollten nicht verwendet werden, die auf große Dateien.
Wenn das kopieren der Daten aus einer text-Datei Lesen funktioniert gut, weil es die Ausgabe mit der write-Funktion ohne die Notwendigkeit für add line termination.
InformationsquelleAutor der Antwort Bill Kidd
Weder. Beide Lesen den Inhalt in den Speicher.
Bei großen Dateien iteriert file-Objekt, das nur zu Lasten einer Zeile in der Datei zu einem Zeitpunkt und ist vielleicht eine gute Art sich mit dem Inhalt einer großen Datei.
InformationsquelleAutor der Antwort Senthil Kumaran