2012-10-10 9 views
9

zipファイル内のファイルをPythonでシーク可能なものにしてメモリに読み込ませないでください。Pythonでzipファイル内のファイルをメモリに渡さずに

私は明白な手順を試してみましたが、ファイルがシークできないので、私はエラーを取得する:

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 

答えて

8

すべてのzipファイルのためにそうする方法はありません。 DEFLATEはストリーム圧縮アルゴリズムです。つまり、ファイルの任意の部分を圧縮解除せずにすべてを圧縮解除することはできません。 は、格納されたファイルに対して実装される可能性がありますが、一部のエントリが検索可能であり、他のエントリが見つからないような好ましくない位置にあります。

+0

ありがとうございます。しかし、私が探しているものから、tarファイルで可能でしょうか? – jbssm

+0

tarファイルが解凍されている場合のみ。 gzip(DEFLATE)圧縮をスローすると、同じ問題が発生します。 –

+1

gzipで圧縮されたtarファイルを使用してその中を探すことができます。Pythonはメモリ内やtmpディスク内のどこかで解凍しているようですが、圧縮されていないファイルに比べて時間がかかります私が試している例に1分対4秒。すべての助けをありがとう。 – jbssm

関連する問題