2013-06-20 3 views
5

Ich habe einen Thread, in dem ich eine Zip-Datei mit zipfile.ZipFile().read() lesen, wo ich einen Speicherfehler erhalte.Speicherfehler beim Lesen einer Zip-Datei in Python

Ich bin mir bewusst, dass read() lädt die gesamte Datei in den Speicher. Die Größe der Datei nach dem Entpacken beträgt mehr als 100 MB. Ich habe es auch mit zipfile.ZipFile().open().readlines() versucht, aber es dauert zu viel Zeit.

Gibt es eine Möglichkeit, dass ich die Datei mit Geschwindigkeit lesen kann, ohne Speicherfehler zu bekommen?

+0

'readlines() 'ohne' sizehint'-Argument liest auch die gesamte Datei in den Speicher und erstellt eine Liste der Zeilen. Es würde also nicht die Speicheranforderungen reduzieren, sondern sie eher erhöhen. Siehe Aya's Antwort. – msw

Antwort

5

Angenommen, Sie versuchen, eine gezippte Textdatei zu lesen, können Sie die Datei-ähnliches Objekt durch ZipFile.open() als Iterator zurück behandeln und verarbeiten Line-by-line ...

from zipfile import ZipFile 

zip = ZipFile('myzip.zip') 
stream = zip.open('myfile.txt') 
for line in stream: 
    do_something_with(line)