2013-06-20 12 views
5

Ho una discussione in cui sto leggendo un file zip con zipfile.ZipFile().read(), dove sto ricevendo un errore di memoria.Errore di memoria durante la lettura di un file zip in python

Sono consapevole che read() carica l'intero file in memoria. La dimensione del file dopo la decompressione è superiore a 100 MB. Ho anche provato con zipfile.ZipFile().open().readlines(), ma ci vuole troppo tempo.

C'è un modo per poter leggere il file con velocità senza ottenere errori di memoria?

+0

'readlines() 'con nessun argomento' sizehint' legge anche l'intero file in memoria e crea un elenco delle linee. Quindi non ridurrebbe i requisiti di memoria, ma piuttosto li aumenterebbe leggermente. Vedi la risposta di Aya. – msw

risposta

5

Supponendo che si sta cercando di leggere un file di testo con zip, è possibile trattare l'oggetto simile a file restituito da ZipFile.open() come un iteratore, e il processo è line-by-line ...

from zipfile import ZipFile 

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