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 相关文章推荐
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
Django3.0 异步通信初体验(小结)
Dec 04 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
python实现单机五子棋
Aug 28 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
Matlab如何实现矩阵复制扩充
Jun 02 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
PHP输入输出流学习笔记
2015/05/12 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
利用JS实现数字增长
2016/07/28 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
js实现Tab选项卡切换效果
2020/07/17 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
基于python编写的微博应用
2014/10/17 Python
python实现rsa加密实例详解
2017/07/19 Python
Python实现抢购IPhone手机
2018/02/07 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
基于Python fminunc 的替代方法
2020/02/29 Python
pygame实现飞机大战
2020/03/11 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
党员入党表决心的话
2014/03/11 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
2014春晚主持词
2014/03/25 职场文书
大学生活自我评价
2014/04/09 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
2014年底工作总结
2014/12/15 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
2016新年感言
2015/08/03 职场文书