2012-10-10 8 views
9

czy mimo to plik w pliku zip jest dostępny w Pythonie bez czytania go w pamięci?seek() plik w pliku zip w Pythonie bez przekazywania go do pamięci

Próbowałem oczywiste procedury, ale pojawia się błąd, ponieważ nie jest możliwy do przeszukania pliku:

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 

Odpowiedz

8

Nie ma sposobu, aby to zrobić dla wszystkich plików zip. DEFLATE to algorytm kompresji strumieniowej, co oznacza, że ​​nie ma możliwości zdekompresowania dowolnych części pliku bez dekompresji wszystkiego przed nim. To może być zaimplementowane dla plików, które zostały zapisane, ale wtedy dostajesz się w niekorzystnej pozycji, gdzie niektóre wpisy są widoczne, a inne nie.

+0

Widzę, dziękuję. Ale z tego, czego szukam, jest to możliwe z plikami tar, prawda? – jbssm

+0

Tylko jeśli plik tar jest nieskompresowany. Jak tylko wrzucisz kompresję gzip (DEFLATE), pojawi się ten sam problem. –

+1

Mimo że dzieje się to w locie, mogę użyć skompresowanego pliku gzip tar i szukać w nim, Python zdaje się dekompresować go w pamięci lub gdzieś na dysku tmp, a proces zajmuje dużo czasu w porównaniu do nieskompresowanego pliku - około 1min vs 4 sekundy do przykładu, który próbuję. Dziękuję za całą pomoc. – jbssm

Powiązane problemy