【发布时间】:2019-12-12 01:06:52
【问题描述】:
我正在尝试在 python 中读取一个用 pkzip 编写的 zip 文件:
import zipfile
fname = "myfile.zip"
unzipped = zipfile.ZipFile(fname, "r")
但是得到这个错误:
unzipped = zipfile.ZipFile(fname, "r")
File "/home/username/anaconda3/envs/c1/lib/python3.7/zipfile.py", line 1222, in __init__
self._RealGetContents()
File "/home/username/anaconda3/envs/c1/lib/python3.7/zipfile.py", line 1285, in _RealGetContents
endrec = _EndRecData(fp)
File "/home/username/anaconda3/envs/c1/lib/python3.7/zipfile.py", line 282, in _EndRecData
return _EndRecData64(fpin, -sizeEndCentDir, endrec)
File "/home/username/anaconda3/envs/c1/lib/python3.7/zipfile.py", line 228, in _EndRecData64
raise BadZipFile("zipfiles that span multiple disks are not supported")
zipfile.BadZipFile: zipfiles that span multiple disks are not supported
据我所知,这个文件不跨越多个磁盘。我这样说是因为:
检查 against the solution in this Stackoverflow answer,我的 zipfile 版本已适当修补。
-
它可以很好地解压缩:
$ unzip myfile.zip在 linux 命令行上。
所以,它实际上并不是一个糟糕的 zip 文件。通过使用原始文件访问打开它来读取前几个字节,有一个暗示头,PKzip 可能正在以一种有趣的方式格式化这个文件:
b'PK\x03
查看 zipfile 的 python 库文档,有一个 PKZIP 应用说明:
ZIP 文件格式是一种常见的存档和压缩标准。这个 模块提供创建、读取、写入、附加和列出 ZIP 的工具 文件。该模块的任何高级使用都需要了解 PKZIP 应用说明中定义的格式。
links here。这是非常彻底的,但我没有看到关于如何将哪些选项添加到对 zipfile 的调用以正确解析文件的具体说明。
PKZIP 的使用相当广泛,所以我很惊讶没有找到更常见的示例或原生支持。需要哪些选项才能在 python 中打开一个引发此多磁盘错误的 pkzipped 文件?
【问题讨论】: