2013-06-20 12 views
5

Mam wątek, w którym odczytuję plik zip z numerem zipfile.ZipFile().read(), gdzie pojawia się błąd pamięci.Błąd pamięci podczas odczytu pliku zip w pythonie

Mam świadomość, że read() ładuje cały plik do pamięci. Rozmiar pliku po rozpakowaniu wynosi więcej niż 100 MB. Próbowałem również z zipfile.ZipFile().open().readlines(), ale zajmuje to zbyt dużo czasu.

Czy jest jakiś sposób, że mogę czytać plik z prędkością bez otrzymania błędu pamięci?

+0

'readlines() 'bez argumentu' sizehint' odczytuje również cały plik do pamięci i buduje listę linii. Nie zmniejszyłoby to wymagań pamięciowych, a raczej nieznacznie je zwiększyło. Zobacz odpowiedź Ayi. – msw

Odpowiedz

5

Zakładając próbujesz przeczytać spakowany plik tekstowy, można traktować obiekt plikopodobny zwrócony przez ZipFile.open() jako iterator, a proces to linia po linii ...

from zipfile import ZipFile 

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