我尝试使用zipfile.extractAll通过Python解压缩文件,但它提供了BAD zip文件,因此我尝试了这个:
zipfile cant handle some type of zip data?
如本回答所述,我使用了代码:
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 enter code here
但它给出了错误
消息文件名称行位置追溯
C:\ Users \ aditya1.r \ Desktop \ Python_pyscripter \ module1.py 50
主C:\ Users \ aditya1.r \ Desktop \ Python_pyscripter \ module1.py 17
fixBadZipfile C:\ Users \ aditya1.r \ Desktop \ Python_pyscripter \ module1.py 37
TypeError:'str'不支持缓冲区接口
我正在使用Python 3.4
如何解压缩此文件?
答案 0 :(得分:0)
请仔细阅读此链接,这可能就是您要找的内容
答案 1 :(得分:0)
您正在将该文件作为bytes
对象阅读,但尝试查找传递string
对象,只需更改此行即可 -
pos = data.find('\x50\x4b\x05\x06')
到
pos = data.find(b'\x50\x4b\x05\x06')
请注意,我已经通过简单地添加b
。
你不需要这样做是Python 2.X但是在python 3.X中你需要显式地将string
对象序列化为byte
对象。
答案 2 :(得分:0)
import subprocess
subprocess.Popen('unzip ' + file_name, shell = True).wait()
希望这可以帮助你:)