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文件操作整理汇总
Oct 21 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
python调用摄像头拍摄数据集
Jun 01 Python
Python何时应该使用Lambda函数
Jul 02 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
QML实现钟表效果
Jun 02 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Python 下载Bing壁纸的示例
Sep 29 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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 socket方式提交的post详解
2008/07/19 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
Express URL跳转(重定向)的实现方法
2017/04/07 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
vue下拉列表功能实例代码
2018/04/08 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
超市总经理岗位职责
2014/02/02 职场文书
运动会稿件300字
2014/02/14 职场文书
日化店促销方案
2014/03/26 职场文书
环保志愿者活动方案
2014/08/14 职场文书
2015毕业生简历自我评价
2015/03/02 职场文书
医学生自荐信范文
2015/03/05 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js