Python zipfile模块错误地认为我有一个跨越多个磁盘的zipfile,抛出了BadZipfile错误

use*_*702 9 zipfile python-2.7

我有一个1.4GB的zip文件,我试图连续产生每个成员.zipfile模块不断抛出BadZipfile异常,说明这一点

"zipfile.BadZipfile:不支持跨多个磁盘的zipfiles".

这是我的代码:

import zipfile

def iterate_members(zip_file_like_object):
  zflo = zip_file_like_object
  assert zipfile.is_zipfile(zflo) # Here is where the error happens.
  # If I comment out the assert, the same error gets thrown on this next line:
  with zipfile.ZipFile(zflo) as zip:
    members = zip.namelist()
    for member in members:
      yield member

fn = "filename.zip"
iterate_members(open(fn, 'rb'))
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 2.7.3.我在Windows 8和ubuntu上尝试了相同的结果.任何帮助非常感谢.

小智 12

虽然我使用python 3.4,但我在类似的文件上得到了同样的错误

能够通过编辑zipfile.py源代码中的第205行来修复它:

if diskno != 0 or disks != 1:
    raise BadZipFile("zipfiles that span multiple disks are not supported")
Run Code Online (Sandbox Code Playgroud)

至:

if diskno != 0 or disks > 1:
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 这事有进一步更新吗?这似乎不是可接受的解决方案,因为您需要手动修改Python库源代码。如果python安装在云中运行并且您无权访问Python安装该怎么办。 (3认同)
  • Windows 中内置的 zip 工具似乎有问题,并且会生成一个类似于 zip64 的归档结束记录,但实际上并非如此。因此`_EndRecData64` 发现`diss == 0`。它应该返回 `endrec`。但修复效果很好,谢谢。 (2认同)