Python zipfile报错问题

最近用Python 来读zip的压缩包 。报一个错误。

Python 2.6.6 (r266:84292, Jun 18 2012, 14:18:47)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import zipfile
>>> zipfile.ZipFile('bla.apk')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/zipfile.py", line 696, in __init__
    self._GetContents()
  File "/usr/lib64/python2.6/zipfile.py", line 716, in _GetContents
    self._RealGetContents()
  File "/usr/lib64/python2.6/zipfile.py", line 772, in _RealGetContents
    x._decodeExtra()
  File "/usr/lib64/python2.6/zipfile.py", line 351, in _decodeExtra
    tp, ln = unpack('<HH', extra[:4])
struct.error: unpack requires a string argument of length 4

这应该算是 Python的一个bug ,详细的在 http://bugs.python.org/issue14315 这里有讨论。

解决方法有两个。

一是 : 按照这个网页所讨论的, 打一个补丁 。http://bugs.python.org/file24902/fix_zipfile_extra.patch  。

具体就是 进入 /usr/lib64/python2.6/zipfile.py 这个文件 ,在 351行附近 ,把 while extra: 改成 while len(extra) >= 4:

方法二是 升级 Python版本 。

在Python 2.6.6 上发现了这个问题 。这个Python是Linux自带的版本,可能比较低。升级2.7.3 以上的版本 ,在高版本中这个问题已经被解决了。 所以升级Python也是个办法。

时间: 2024-10-25 16:09:05

Python zipfile报错问题的相关文章

Python递归报错:RuntimeError: maximum recursion depth exceeded in comparison

Python中默认的最大递归深度是989,当尝试递归第990时便出现递归深度超限的错误: RuntimeError: maximum recursion depth exceeded in comparison 简单方法是使用阶乘重现: 1 #! /usr/bin/env Python 2 3 def factorial(n): 4 5 if n == 0 or n == 1: 6 7 return 1 8 9 else: 10 11 return(n * factorial(n - 1)) >

python 编码报错问题 &#39;ascii&#39; codec can&#39;t encode characters 解决方法

python在安装时,默认的编码是ascii, 当程序中出现非ascii编码时,python的处理常常会报这样的错 'ascii' codec can't encode characters python没办法处理非ascii编码的, 此时需要自己设置将python的默认编码,一般设置为utf8的编码格式. 查看python的默认编码 print sys.getdefaultencoding() 解决方法一(已通过验证,顺带也解决了我之前字符前一直加u的问题) 在python安装目录下,进入\P

安装python模块报错 error: command &#39;gcc&#39; failed with exit status 1

最近在安装paramiko模块的时候,总是报错:error: command 'gcc' failed with exit status 1,一开始比较挠头.找了蛮多资料,说的大多都是说缺少Python-devel 包,然而并不是! 最后蛮费劲的找到了一遍短小但就是正确的博文:http://blog.csdn.net/fenglifeng1987/article/details/38057193 —————————————————————— 解决方法: 安装:yum install gcc li

运行python代码报错UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe7 in position 91: ordinal not in range(128)的解决办法

1.通过搜集网上的资料,自己多次尝试,问题算是解决了,在代码中加上如下几句即可: import sys reload(sys) sys.setdefaultencoding('utf-8') 2.原因就是Python的str默认是ascii编码,和unicode编码冲突,混淆了python2 里边的 str 和 unicode 数据类型. 3.python3 区分了 unicode str 和 byte arrary,并且默认编码不再是 ascii. 运行python代码报错UnicodeDec

python执行报错 configparser.NoSectionError: No section: &#39;section_1&#39;

场景:请求获取验证码模块regVC.py读取配置文件config.ini时,regVC.py模块单独执行正常,但通过run_all.py模块批量执行时报错,找不到section 解决办法:配置文件路径需写绝对路径 config.ini文件如下: regVC.py模块代码如下: 1 import requests 2 import configparser 3 import unittest 4 from Case.readexcel import ExcelData 5 import json

python webdriver 报错WebDriverException: Message: can&#39;t access dead object的原因(pycharm中)

PyCharm中运行firefox webdriver访问邮箱添加通讯录的时候报错-WebDriverException: Message: can't access dead object 调了半天,发现是因为在登录操作后没有从frame中切换出来导致的,因为在登录的时候需要先切换到frame中,登录之后要切换出来才能继续其他操作. 下面是我运行的代码,driver.switch_to.default_content()这一行被我注释掉了,结果就报这个错 代码:driver=webdriver

python执行报错“UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xa1 in position 110: illegal multibyte sequence”

执行如下程序报错 import pytest @pytest.fixture() def user(): print("获取用户名") a = "zt" return a def test_1(user): assert user == "zt" if __name__ == "__main__": pytest.main(["-s","test_fixture1.py"]) Testi

【Python 脚本报错】AttributeError: &#39;module &#39;yyy&#39; has no attribute &#39;xxx&#39;的解决方法

先参考这篇记录大概理解了原因, 再深入了解下python的import机制, 发现自己的模块之间存在互相import. 比如,A.py中import B,而B.py中也import A了, 现在执行模块A,就会先将B中的代码搬过来,但B中有import A,而此时A.pyc还没生成,所以B中import A之后的代码也执行不了: 如果mode B 的 attribute xxx是定义在import A之后,那么就会出现题目中的报错: (而python是解释性语言,所以import A之前的代码还

Python requests 报错解决集锦

python版本和ssl版本都会导致 requests在请求https网站时候会出一些错误,最好使用新版本. 1 Python2.6x use requests 一台老Centos机器上跑着古老的应用,加了一个新模块之后报错 报错 InsecurePlatformWarning: A true SSLContext object is not available. /usr/lib/python2.6/site-packages/requests/packages/urllib3/util/ss