我有两个 zip 文件,它们都可以用 Windows Explorer 和 7-zip 很好地打开。
但是,当我使用 Python 的 zipfile 模块 [ zipfile.ZipFile("filex.zip") ] 打开它们时,其中一个会被打开,但另一个会出现错误“ BadZipfile: File is not a zip file
”。
通过使用 7-Zip 打开它并查看其属性(例如 7Zip.ZIP),我确保后者是一个有效的 Zip 文件。当我用文本编辑器打开文件时,前两个字符是“PK”,表明它确实是一个 zip 文件。
我正在使用 Python 2.5,并且真的不知道如何去做。我在 Windows 和 Ubuntu 上都试过了,两个平台上都存在问题。
更新: Windows 上 Python 2.5.4 的追溯:
Traceback (most recent call last):
File "<module1>", line 5, in <module>
zipfile.ZipFile("c:/temp/test.zip")
File "C:\Python25\lib\zipfile.py", line 346, in init
self._GetContents()
File "C:\Python25\lib\zipfile.py", line 366, in _GetContents
self._RealGetContents()
File "C:\Python25\lib\zipfile.py", line 378, in _RealGetContents
raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file
基本上,当_EndRecData
调用该函数以从“中央目录结尾”记录中获取数据时,评论长度检查失败 [endrec[7] == len(comment)]。
函数中locals的值_EndRecData
如下:
END_BLOCK: 4096,
comment: '\x00',
data: '\xd6\xf6\x03\x00\x88,N8?<e\xf0q\xa8\x1cwK\x87\x0c(\x82a\xee\xc61N\'1qN\x0b\x16K-\x9d\xd57w\x0f\xa31n\xf3dN\x9e\xb1s\xffu\xd1\.....', (truncated)
endrec: ['PK\x05\x06', 0, 0, 4, 4, 268, 199515, 0],
filesize: 199806L,
fpin: <open file 'c:/temp/test.zip', mode 'rb' at 0x045D4F98>,
start: 4073