python - zipfile 无法处理某些类型的 zip 数据?

标签 python python-zipfile

我在尝试解压缩 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/

相关文章:

python - Django:在 Docker 容器中运行时找不到模块

python - Python 文件权限中的 Zipfile

python - 使用opencv查找水平线和垂直线

python - 如何在 CNTK Sequential 中添加两层

python - 在 Python 中禁用断言

python - 在python中压缩文件

python - 在 Python 中搜索()一个 zip 文件中的文件而不将其传递到内存

javascript - 如何在 iPython Notebook 中渲染 Dygraph?

python - 在内存中创建一个 ZipFile 并将其附加到电子邮件中

从长路径提取文件时 Windows 上的 Python Zipfile extractall IOError