在Python中在zip文件中查找文件而不将其传递到内存的方法是使用seek()。

9
有没有办法在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
2个回答

9

所有zip文件都没有这样的方法。DEFLATE是一种流压缩算法,这意味着没有办法在没有解压缩之前解压缩文件的任意部分。它可能可以为已存储的文件实现,但这会导致一些条目可寻址而其他条目不可寻址的不利位置。


我明白了,谢谢。但是根据我的搜索,使用tar文件是可能的,对吗? - jbssm
只有在tar文件未压缩的情况下才能这样做。一旦你使用gzip(DEFLATE)压缩,就会出现同样的问题。 - Ignacio Vazquez-Abrams
1
尽管它是即时发生的,我可以使用gzip压缩的tar文件并在其中查找,但Python似乎要么在内存中解压缩它,要么在tmp磁盘上解压缩它,这个过程比解压缩未压缩文件需要更多的时间 - 大约1分钟对比我正在尝试的4秒钟。感谢您的所有帮助。 - jbssm


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接