Python实现多级目录压缩与解压文件的方法
程序员文章站
2022-06-05 20:59:09
本文实例讲述了python实现多级目录压缩与解压文件的方法。分享给大家供大家参考,具体如下:
咱向来就是拿来主意,也发个东西供同行“拿来”使用吧
咱信奉的就是少量的代码...
本文实例讲述了python实现多级目录压缩与解压文件的方法。分享给大家供大家参考,具体如下:
咱向来就是拿来主意,也发个东西供同行“拿来”使用吧
咱信奉的就是少量的代码完成大量的工作,虽然代码不多,但还是要用大脑的。发出来供大家参考
功能:
- 支持中文路径,支持多级目录
- 支持跨平台,在linux和window下都可直接使用
- 压缩的多态性
- 压缩包不带级父文件夹目录压缩
- 压缩包带父级文件夹目录
- 不指定目标文件与路径压缩
- 指定压缩包名称不指定路径压缩
还是看代码吧
#coding:utf-8 #压缩解压文件模块 #支持中文路径,支持多级目录 #支持跨平台,在linux和window下都可直接使用 #python 2.7.2 #author:xieshuxu #qq:258356793 #email:sondx@qq.com import zipfile,os class zipexception(exception): pass def unzipfile(zippath,unzippath=''): '''解压文件 zippath 要解压的文件路径 unzippath 解压目标路径 默认解压到zippath所在目录 ''' try: filepath=filepath.decode('utf-8'); zipfilepath=zipfilepath.decode('utf-8'); except: print '================' if not os.path.exists(zippath): raise zipexception,'function unzipfile:not exists file or dir(%s)' %zippath; if unzippath=='': unzippath=os.path.splitext(zippath)[0]; if not unzippath.endswith(os.sep): unzippath+=os.sep; z = zipfile.zipfile(zippath, 'r') #zipinfolist=z.namelist(); for k in z.infolist(): savepath=unzippath+k.filename; savedir=os.path.dirname(savepath); if not os.path.exists(savedir): os.makedirs(savedir); f=open(savepath,'wb'); f.write(z.read(k)); f.close(); z.close(); #print unzippath global _iterateexezipfile; def exezipfile(filepath,zipfilepath=''): '''压缩文件 filepath 要解压的文件路径 可以是文件或者目录 os.sep结尾表示压缩该目录下的子文件和文件夹 不包含该文件夹,否则包含该文件夹压缩 zipfilepath 压缩包文件路径 也可只传文件名 默认压缩到filepath的父级目录下 ''' filepath=filepath.decode('utf-8'); zipfilepath=zipfilepath.decode('utf-8'); #压缩文件不存在直接返回 if not os.path.exists(filepath): raise zipexception,'function exezipfile:not exists file or dir(%s)' %filepath; # 是否包含父级目录压缩 haspdir=not filepath.endswith(os.sep); if not haspdir: filepath=os.path.dirname(filepath); print filepath #校验备份文件路径 if zipfilepath=='': zipfilepath=os.path.splitext(filepath)[0]+'.zip'; elif zipfilepath.find(os.sep)==-1:#只传文件名的处理 zipfilepath=os.path.dirname(filepath)+os.sep+zipfilepath; #校验创建备份路径目录 if not os.path.exists(os.path.dirname(zipfilepath)): os.makedirs(os.path.dirname(zipfilepath)); #初始化压缩包中的根目录 ziproot=''; if haspdir: ziproot=os.path.split(filepath)[1]; #开始压缩 z = zipfile.zipfile(zipfilepath, 'w') if os.path.isfile(filepath): z.write(filepath,os.path.split(filepath)[1]); else: _iterateexezipfile(filepath,ziproot,z); z.close(); def _iterateexezipfile(dirpath,ziproot,z):
压缩使用的例子:
if __name__=='__main__': #压缩包不带级父文件夹目录 testdir='d:\\codesource\\linuxagent\\' zipfilepath='d:\\codesource\\压缩包不带父级目录.zip' exezipfile(testdir,zipfilepath); #压缩包带父级文件夹目录 testdir='d:\\codesource\\linuxagent'#不带后缀斜线 zipfilepath='d:\\codesource\\压缩包带父级目录.zip' exezipfile(testdir,zipfilepath); #不指定目标文件与路径压缩 testdir='d:\\codesource\\linuxagent' exezipfile(testdir); #指定压缩包名称不指定路径压缩 testdir='d:\\codesource\\linuxagent\\' exezipfile(testdir,'仅指定名称压缩包.zip');
解压的例子:
#指定解压目录解压文件 testdir=u'd:\\codesource\\仅指定名称压缩包\\' zipfilepath=u'd:\\codesource\\仅指定名称压缩包.zip' unzipfile(zipfilepath,testdir); #不指定目录解压 zipfilepath=u'd:\\codesource\\仅指定名称压缩包.zip' unzipfile(zipfilepath);
好了!就这么多,如果你觉得有用就顶一下吧。有问题也可以联系我
更多关于python相关内容感兴趣的读者可查看本站专题:《python文件与目录操作技巧汇总》、《python文本文件操作技巧汇总》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》及《python入门与进阶经典教程》
希望本文所述对大家python程序设计有所帮助。