python的zipfile实现文件目录解压缩

主要是 解决了压缩目录下 空文件夹 的压缩 和 解压缩问题

压缩文件夹的函数:

 1 # coding:utf-8
 2 import os
 3 import zipfile
 4 
 5 def zipdir(dirToZip,savePath):
 6     if not os.path.isdir(dirToZip):
 7         raise Exception,u"zipDir Error,not a dir'%'".format(dirToZip)
 8 
 9     (saveDir,_)=os.path.split(savePath)
10     if not os.path.isdir(saveDir):
11         os.makedirs(saveDir)
12 
13     zipList = []
14 
15     for root,dirs,files in os.walk(dirToZip):
16         for fileItem in files:
17             zipList.append(os.path.join(root,fileItem))
18         for dirItem in dirs:
19             zipList.append(os.path.join(root,dirItem))
20 
21     zf = zipfile.ZipFile(savePath,'w',zipfile.ZIP_DEFLATED)
22 
23     for tar in zipList:
24         if tar != dirToZip:
25             zf.write(tar,tar.replace(dirToZip,''))
26         else:
27             zf.write(tar)
28 
29     zf.close()

解压的函数:

 1 def unZipFile(unZipSrc,targeDir):
 2     if not os.path.isfile(unZipSrc):
 3         raise Exception,u'unZipSrc not exists:{0}'.format(unZipSrc)
 4 
 5     if not os.path.isdir(targeDir):
 6         os.makedirs(targeDir)
 7 
 8     print(u'开始解压缩文件:{0}'.format(unZipSrc))
 9 
10     unZf = zipfile.ZipFile(unZipSrc,'r')
11 
12     for name in unZf.namelist() :
13         unZfTarge = os.path.join(targeDir,name)
14 
15         if unZfTarge.endswith("/"):
16             #empty dir
17             splitDir = unZfTarge[:-1]
18             if not os.path.exists(splitDir):
19                 os.makedirs(splitDir)
20         else:
21             splitDir,_ = os.path.split(targeDir)
22 
23             if not os.path.exists(splitDir):
24                 os.makedirs(splitDir)
25 
26             hFile = open(unZfTarge,'wb')
27             hFile.write(unZf.read(name))
28             hFile.close()
29 
30     print(u'解压缩完毕,目标文件目录:{0}'.format(targeDir))
31 
32     unZf.close()

调用:

if __name__ == '__main__':
    dirpath = os.path.abspath(u'.\new')
    savepath = os.path.abspath(u'.\new.zip')

#    zipdir(dirpath,savepath)
    unZipFile(savepath,dirpath)
原文地址:https://www.cnblogs.com/sixbeauty/p/4285827.html