2012-10-10 12 views
9

c'è comunque la possibilità di creare un file all'interno di un file zip ricercabile in Python senza leggerlo in memoria?seek() un file all'interno di un file zip in Python senza passarlo alla memoria

ho provato la procedura ovvio, ma ottengo un errore dal momento che il file non è ricercabile:

In [74]: inputZipFile = zipfile.ZipFile("linear_g_LAN2A_F_3keV_1MeV_30_small.zip", 'r') 

In [76]: inputCSVFile = inputZipFile.open(inputZipFile.namelist()[0], 'r') 

In [77]: inputCSVFile 
Out[77]: <zipfile.ZipExtFile at 0x102f5fad0> 

In [78]: inputCSVFile.se 
inputCSVFile.seek  inputCSVFile.seekable 

In [78]: inputCSVFile.seek(0) 
--------------------------------------------------------------------------- 
UnsupportedOperation      Traceback (most recent call last) 
<ipython-input-78-f1f9795b3d55> in <module>() 
----> 1 inputCSVFile.seek(0) 

UnsupportedOperation: seek 

risposta

8

Non c'è modo di farlo per tutti i file zip. DEFLATE è un algoritmo di compressione del flusso, il che significa che non c'è modo di decomprimere parti arbitrarie del file senza aver decompresso tutto prima di esso. Si può possibilmente essere implementato per i file che sono stati memorizzati, ma poi si ottiene nella posizione sfavorevole in cui alcune voci sono ricercabili e altri no.

+0

Vedo, grazie. Ma da quello che sto cercando, è possibile con i file tar, corretto? – jbssm

+0

Solo se il file tar non è compresso. Non appena si introduce la compressione gzip (DEFLATE), si ottiene lo stesso problema. –

+1

Anche se succede al volo, posso usare un file tar compresso con gzip e cercare all'interno di esso, Python sembra che lo stia decomprimendo in memoria o da qualche parte in un disco tmp e il processo richiede molto tempo rispetto a un file non compresso - circa 1min vs 4 secondi all'esempio che sto provando. Grazie per tutto l'aiuto. – jbssm

Problemi correlati