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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Python中基础的socket编程实战攻略
Jun 01 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
python多任务之协程的使用详解
Aug 26 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
Aug 31 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 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来自动调用不同服务器上的flash
2006/10/09 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
jQuery学习笔记之创建DOM元素
2015/01/19 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
python实现百度关键词排名查询
2014/03/30 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
如何用python免费看美剧
2020/08/11 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
德国游戏机商店:Konsolenkost
2019/12/08 全球购物
Bata印度官网:源自欧洲舒适鞋履品牌
2020/01/30 全球购物
怎样创建、运行java程序
2014/08/01 面试题
餐厅筹备计划书
2014/04/25 职场文书
大学生工作求职信
2014/06/23 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
六年级小学生评语
2014/12/26 职场文书
文明上网主题班会
2015/08/14 职场文书
webpack的移动端适配方案小结
2021/07/25 Javascript
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA