最近用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也是個辦法。
--------------------------------------分割線 --------------------------------------
CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm
Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡