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
4

2 回答 2

9

无法对所有 zip 文件执行此操作。DEFLATE 是一种流压缩算法,这意味着如果不解压缩之前的所有内容,就无法解压缩文件的任意部分。它可能会针对已存储的文件实现,但随后您会处于不利的位置,其中一些条目可查找而其他条目不可查找。

于 2012-10-10T14:48:39.120 回答
1

ZipExtFile 现在是可搜索的:

https://bugs.python.org/issue22908 https://github.com/python/cpython/commit/066df4fd454d6ff9be66e80b2a65995b10af174f

于 2019-05-14T15:01:43.133 回答