我试图在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据我所知,该文件不跨多个磁盘。我这么说是因为:
因此,它似乎并不是一个糟糕的压缩文件。通过使用原始文件访问打开前几个字节,有一个提示性的头,即PKzip可能以一种有趣的方式格式化该文件:
b'PK\x03在查看zipfile的python库文档时,有一个PKZIP应用程序说明:
ZIP文件格式是一个常见的存档和压缩标准。该模块提供了创建、读取、写入、追加和列出ZIP文件的工具。本模块的任何高级使用都需要了解PKZIP应用说明中定义的格式。
哪个这里的链接。这是非常彻底的,但我没有看到关于如何在see文件调用中添加哪些选项以正确解析文件的具体说明。
PKZIP在相当广泛的使用中,所以我很惊讶没有找到更常见的例子或本机支持。在python中打开pkzipped文件需要哪些选项来抛出这个多磁盘错误?
发布于 2019-12-12 09:08:12
您发布的链接从以下内容更改了zipfile
if diskno != 0 or disks != 1:
raise BadZipFile("zipfiles that span multiple disks are not supported")到这个
if diskno != 0 or disks > 1:
raise BadZipFile("zipfiles that span multiple disks are not supported")如果您仍然收到错误“不支持跨多个磁盘的not文件”,这意味着diskno != 0或disks > 1。
您需要更多地了解myfile.zip的内部结构。
尝试运行拉链细节并检查最后一节的输出。下面是单个磁盘归档文件的外观
# zipdetails fred.zip
...
3CF31 END CENTRAL HEADER 06054B50
3CF35 Number of this disk 0000
3CF37 Central Dir Disk no 0000
3CF39 Entries in this disk 0009
3CF3B Total Entries 0009
3CF3D Size of Central Dir 00000317
3CF41 Offset to Central Dir 0003CC1A
3CF45 Comment Length 0000
Donehttps://stackoverflow.com/questions/59296316
复制相似问题