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写的创建文件夹自定义函数mkdir()
Aug 25 Python
Python实现建立SSH连接的方法
Jun 03 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
手把手教你用python抢票回家过年(代码简单)
Jan 21 Python
对命令行模式与python交互模式介绍
May 12 Python
python从子线程中获得返回值的方法
Jan 30 Python
Django实现基于类的分页功能
Oct 31 Python
python中的函数递归和迭代原理解析
Nov 14 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python 批量读取文件中指定字符的实现
Mar 06 Python
Python socket服务常用操作代码实例
Jun 22 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单例模式应用详解
2013/06/03 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
php图片添加水印例子
2016/07/20 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
老生常谈js数据类型
2017/08/03 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
Vue全局分页组件的实现代码
2018/08/10 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
js实现烟花特效
2020/03/02 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
python 决策树算法的实现
2020/10/09 Python
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
EJB的激活机制
2013/10/25 面试题
Java程序员面试题
2016/09/27 面试题
园长自我鉴定
2013/10/06 职场文书
住宅使用说明书
2014/05/09 职场文书
房屋过户委托书范本
2014/10/07 职场文书
安全保证书
2015/01/16 职场文书
小学端午节活动总结
2015/02/11 职场文书