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正则表达式re模块详解
Jun 25 Python
跟老齐学Python之用while来循环
Oct 02 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
python系列 文件操作的代码
Oct 06 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
Python datetime模块使用方法小结
Jun 18 Python
详解pandas赋值失败问题解决
Nov 29 Python
Python 恐龙跑跑小游戏实现流程
Feb 15 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经典的给图片加水印程序
2006/12/06 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
javascript中常用编程知识
2013/04/08 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
Python中的id()函数指的什么
2017/10/17 Python
对tensorflow 的模型保存和调用实例讲解
2018/07/28 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
给导游的表扬信
2014/01/10 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
文体活动总结范文
2014/05/05 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
大学生团日活动总结
2015/05/06 职场文书
python神经网络ResNet50模型
2022/05/06 Python