溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python實現(xiàn)多級目錄壓縮與解壓文件的方法

發(fā)布時間:2020-08-29 03:04:30 來源:腳本之家 閱讀:501 作者:sondx 欄目:開發(fā)技術(shù)

本文實例講述了Python實現(xiàn)多級目錄壓縮與解壓文件的方法。分享給大家供大家參考,具體如下:

咱向來就是拿來主意,也發(fā)個東西供同行“拿來”使用吧

咱信奉的就是少量的代碼完成大量的工作,雖然代碼不多,但還是要用大腦的。發(fā)出來供大家參考

功能:

  • 支持中文路徑,支持多級目錄
  • 支持跨平臺,在linux和window下都可直接使用
  • 壓縮的多態(tài)性
    • 壓縮包不帶級父文件夾目錄壓縮
    • 壓縮包帶父級文件夾目錄
    • 不指定目標文件與路徑壓縮
    • 指定壓縮包名稱不指定路徑壓縮

還是看代碼吧

#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結(jié)尾表示壓縮該目錄下的子文件和文件夾 不包含該文件夾,否則包含該文件夾壓縮
    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;
    #校驗創(chuàng)建備份路徑目錄
    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);

好了!就這么多,如果你覺得有用就頂一下吧。有問題也可以聯(lián)系我

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python文本文件操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程》

希望本文所述對大家Python程序設(shè)計有所幫助。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI