首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中读取用pkzip编写的zip文件?

如何在python中读取用pkzip编写的zip文件?
EN

Stack Overflow用户
提问于 2019-12-12 01:06:52
回答 1查看 1.8K关注 0票数 0

我试图在python中读取一个用pkzip编写的zip文件:

代码语言:javascript
运行
复制
import zipfile
fname = "myfile.zip"
unzipped = zipfile.ZipFile(fname, "r")

但是得到这个错误:

代码语言:javascript
运行
复制
    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

据我所知,该文件不跨多个磁盘。我这么说是因为:

  1. 通过查看针对这个堆栈溢出答案中的解决方案,我的was文件版本得到了适当的修补。
  2. 它可以打开拉链,可以: $ unzip myfile.zip 在linux命令行上。

因此,它似乎并不是一个糟糕的压缩文件。通过使用原始文件访问打开前几个字节,有一个提示性的头,即PKzip可能以一种有趣的方式格式化该文件:

代码语言:javascript
运行
复制
  b'PK\x03

在查看zipfile的python库文档时,有一个PKZIP应用程序说明:

ZIP文件格式是一个常见的存档和压缩标准。该模块提供了创建、读取、写入、追加和列出ZIP文件的工具。本模块的任何高级使用都需要了解PKZIP应用说明中定义的格式。

哪个这里的链接。这是非常彻底的,但我没有看到关于如何在see文件调用中添加哪些选项以正确解析文件的具体说明。

PKZIP在相当广泛的使用中,所以我很惊讶没有找到更常见的例子或本机支持。在python中打开pkzipped文件需要哪些选项来抛出这个多磁盘错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-12 09:08:12

您发布的链接从以下内容更改了zipfile

代码语言:javascript
运行
复制
if diskno != 0 or disks != 1:
    raise BadZipFile("zipfiles that span multiple disks are not supported")

到这个

代码语言:javascript
运行
复制
if diskno != 0 or disks > 1:
    raise BadZipFile("zipfiles that span multiple disks are not supported")

如果您仍然收到错误“不支持跨多个磁盘的not文件”,这意味着diskno != 0disks > 1

您需要更多地了解myfile.zip的内部结构。

尝试运行拉链细节并检查最后一节的输出。下面是单个磁盘归档文件的外观

代码语言:javascript
运行
复制
# 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
Done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59296316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档