无法在Python中解压缩文件夹

时间:2017-02-27 11:18:07

标签: python python-3.4 unzip

我尝试使用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

如何解压缩此文件?

3 个答案:

答案 0 :(得分:0)

请仔细阅读此链接,这可能就是您要找的内容

Unzipping files in python

答案 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()

希望这可以帮助你:)