【问题标题】:seek() a file within a zip file in Python without passing it to memoryseek() Python 中 zip 文件中的文件而不将其传递到内存
【发布时间】:2012-10-10 14:34:50
【问题描述】:

有没有办法让 zip 文件中的文件在 Python 中可搜索而无需将其读入内存?

我尝试了明显的过程,但由于文件不可搜索而出现错误:

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

【问题讨论】:

    标签: python zip zipfile seek


    【解决方案1】:

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

    【讨论】:

    • 我明白了,谢谢。但是从我正在搜索的内容来看,tar 文件是可能的,对吗?
    • 仅当 tar 文件未压缩时。一旦你投入 gzip (DEFLATE) 压缩,你就会遇到同样的问题。
    • 虽然它是即时发生的,但我可以使用 gzip 压缩的 tar 文件并在其中查找,Python 似乎要么在内存中解压缩它,要么在 tmp 磁盘中的某个地方解压,这个过程需要很多时间与未压缩的文件相比 - 我正在尝试的示例大约需要 1 分钟和 4 秒。谢谢大家的帮助。
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多