我在尝试解压缩 zip 文件时遇到了这个问题。
-- zipfile.is_zipfile(my_file)
总是返回 False,即使 UNIX 命令 unzip 处理得很好。此外,当尝试执行 zipfile.ZipFile(path/file_handle_to_path)
时,我遇到了同样的错误
-- file
命令返回 Zip 存档数据,至少要提取 v2.0
并在它显示的文件上使用 less
:
PKZIP for iSeries by PKWARE
Length Method Size Cmpr Date Time CRC-32 Name
2113482674 Defl:S 204502989 90% 2010-11-01 08:39 2cee662e myfile.txt
2113482674 204502989 90% 1 file
有什么办法可以解决这个问题吗?如果我能让 python 的 zipfile
工作,那就太好了,因为我已经有一些单元测试,如果我切换到运行 subprocess.call("unzip") ,我将不得不放弃这些单元测试
最佳答案
在我的文件上遇到同样的问题并且能够解决它。我不确定它们是如何生成的,就像上面的例子一样。他们都有尾随数据,最终被 7z 的 Windows 和失败的 python 压缩文件忽略。
这是解决问题的代码:
def fixBadZipfile(zipFile):
f = open(zipFile, 'r+b')
data = f.read()
pos = data.find('\x50\x4b\x05\x06') # End of central directory signature
if (pos > 0):
self._log("Truncating file at location " + str(pos + 22) + ".")
f.seek(pos + 22) # size of 'ZIP end of central directory record'
f.truncate()
f.close()
else:
# raise error, file is truncated
关于python - zipfile 无法处理某些类型的 zip 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923142/