欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python实现多级目录压缩与解压文件的方法

程序员文章站 2022-06-05 20:59:09
本文实例讲述了python实现多级目录压缩与解压文件的方法。分享给大家供大家参考,具体如下: 咱向来就是拿来主意,也发个东西供同行“拿来”使用吧 咱信奉的就是少量的代码...

本文实例讲述了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文本文件操作技巧汇总》、《python数据结构与算法教程》、《python函数使用技巧总结》、《python字符串操作技巧汇总》及《python入门与进阶经典教程

希望本文所述对大家python程序设计有所帮助。