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和shell变量互相传递的几种方法
Nov 20 Python
使用python解析xml成对应的html示例分享
Apr 02 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
基于python的字节编译详解
Sep 20 Python
Python实现PS图像抽象画风效果的方法
Jan 23 Python
python3人脸识别的两种方法
Apr 25 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
May 18 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
详解Python如何批量采集京东商品数据流程
Jan 22 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 for 循环语句使用方法详细说明
2010/05/09 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
input的focus方法使用
2010/03/13 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
jQuery移动端图片上传组件
2016/06/12 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
python3.0 模拟用户登录,三次错误锁定的实例
2017/11/02 Python
对Python 内建函数和保留字详解
2018/10/15 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
浅析Python 责任链设计模式
2020/09/11 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
中专毕业个人的自荐信格式
2013/09/21 职场文书
集体婚礼策划方案
2014/02/22 职场文书
幼师大班个人总结
2015/02/13 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫