Python实现多级目录压缩与解压文件的方法


Posted in Python onSeptember 01, 2018

本文实例讲述了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版
Aug 12 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python切片操作深入详解
Jul 27 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Python基于Hypothesis测试库生成测试数据
Apr 29 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
python中列表的含义及用法
May 26 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Jun 03 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 #Python
Python pymongo模块常用操作分析
Sep 01 #Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 #Python
python使用webdriver爬取微信公众号
Aug 31 #Python
python爬取微信公众号文章
Aug 31 #Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 #Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 #Python
You might like
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[03:11]不朽宝藏三外观展示
2020/09/18 DOTA
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
使用Python设计一个代码统计工具
2018/04/04 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
2018/12/28 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python 实现汉诺塔游戏
2020/11/28 Python
使用html5 canvas创建太空游戏的示例
2014/05/08 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
网络方面基础面试题
2012/11/16 面试题
英文求职信结束语大全
2013/10/26 职场文书
小学教师师德承诺书
2014/05/23 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
综治目标管理责任书
2015/05/11 职场文书