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中的数据类型
May 05 Python
Python批量转换文件编码格式
May 17 Python
浅谈python字符串方法的简单使用
Jul 18 Python
python rsa 加密解密
Mar 20 Python
python print 按逗号或空格分隔的方法
May 02 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
Python Flask框架模板操作实例分析
May 03 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python二元表达式用法
Dec 04 Python
Python time库基本使用方法分析
Dec 13 Python
python关于调用函数外的变量实例
Dec 26 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 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
自己动手做一个SQL解释器
2006/10/09 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
javascript各种复制代码收集
2008/09/20 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
JS高级运动实例分析
2016/12/20 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JS实现星星海特效
2019/12/24 Javascript
python3.0 字典key排序
2008/12/24 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
深入解析Python中的WSGI接口
2015/05/11 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
keras实现多种分类网络的方式
2020/06/11 Python
Internal修饰符有什么含义
2013/07/10 面试题
学校春季防火方案
2014/06/08 职场文书
售后客服工作职责
2014/06/16 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
2015年检验科工作总结
2015/04/27 职场文书
民事上诉状范文
2015/05/22 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
德生2P3收音机开箱评测
2022/04/30 无线电
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python