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素数检测实例分析
Jun 15 Python
Python 中 Meta Classes详解
Feb 13 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
对python中xlsx,csv以及json文件的相互转化方法详解
Dec 25 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
在vscode中配置python环境过程解析
Sep 28 Python
详解Python time库的使用
Oct 10 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 Python
python轮询机制控制led实例
May 03 Python
python使用多线程+socket实现端口扫描
May 28 Python
python logging 重复写日志问题解决办法详解
Aug 04 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
2012/03/27 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
ThinkPHP CURD方法之where方法详解
2014/06/18 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
php错误日志简单配置方法
2016/07/11 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
javascript实现日历效果
2019/06/17 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
2020/09/05 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
在Python中使用异步Socket编程性能测试
2014/06/25 Python
python实现统计代码行数的方法
2015/05/22 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
大学生简历的个人自我评价
2013/12/04 职场文书
《值日生》教学反思
2014/02/17 职场文书
党务公开方案
2014/05/06 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书