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 dir17 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)
python的zipfile实现文件目录解压缩