python - 在 python 中解压嵌套的 zip 文件

标签 python zip

我正在寻找一种在 python 中解压缩嵌套 zip 文件的方法。例如,考虑以下结构(为方便起见,使用假设名称):

  • 文件夹
    • ZipfileA.zip
      • 压缩文件A1.zip
      • 压缩文件A2.zip
    • ZipfileB.zip
      • 压缩文件B1.zip
      • 压缩文件B2.zip

...等等我正在尝试访问第二个 zip 中的文本文件。我当然不想提取所有内容,因为剪切数字会使计算机崩溃(第一层有数百个 zip,第二层有近 10,000 个(每个 zip))。

我一直在玩“zipfile”模块——我可以打开第一级 zipfiles。例如:

zipfile_obj = zipfile.ZipFile("/Folder/ZipfileA.zip")
next_layer_zip = zipfile_obj.open("ZipfileA1.zip")

但是,这会返回一个“ZipExtFile”实例(不是文件或 zipfile 实例)- 然后我无法继续打开此特定数据类型。我不能这样做:

data = next_layer_zip.open(data.txt)

不过,我可以通过以下方式“读取”此 zip 文件:

next_layer_zip.read()

但这完全没用! (即只能读取压缩数据/goobledigook)。

有没有人对我如何解决这个问题有任何想法(使用 ZipFile.extract)?

我遇到了这个,http://pypi.python.org/pypi/zip_open/ - 它看起来完全符合我的要求,但它似乎对我不起作用。 (对于我尝试使用该模块处理的文件,不断收到“[Errno 2] 没有这样的文件或目录:”)。

任何想法将不胜感激!!提前致谢

最佳答案

ZipFile 需要一个类似文件的对象,因此您可以使用 StringIO 将从嵌套 zip 中读取的数据变成这样一个对象。需要注意的是,您会将完整(仍然压缩)的内部 zip 加载到内存中。

with zipfile.ZipFile('foo.zip') as z:
    with z.open('nested.zip') as z2:
        z2_filedata = cStringIO.StringIO(z2.read())
        with zipfile.ZipFile(z2_filedata) as nested_zip:
            print nested_zip.open('data.txt').read()

关于python - 在 python 中解压嵌套的 zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11930515/

相关文章:

windows - 使用批处理文件静默提取 zip 文件

windows - 使用 7-Zip 压缩和删除同一文件

android - XAPK 文件验证显示正确的数据信息

c++ - 使用 zlib 压缩目录

java - 谷歌端点

python - if 语句的单行上的多个逻辑比较

python - 使用 Python 从 MySQL 检索整数以执行数学函数

python - Kivy (Python) - 椭圆点击事件

python - conda 更新 anaconda 失败 |破坏错误

python - 如何迭代解析 zipfile 对象