Python實(shí)現(xiàn)多級(jí)目錄壓縮與解壓文件的方法
本文實(shí)例講述了Python實(shí)現(xiàn)多級(jí)目錄壓縮與解壓文件的方法。分享給大家供大家參考,具體如下:
咱向來(lái)就是拿來(lái)主意,也發(fā)個(gè)東西供同行“拿來(lái)”使用吧
咱信奉的就是少量的代碼完成大量的工作,雖然代碼不多,但還是要用大腦的。發(fā)出來(lái)供大家參考
功能:
- 支持中文路徑,支持多級(jí)目錄
- 支持跨平臺(tái),在linux和window下都可直接使用
- 壓縮的多態(tài)性
- 壓縮包不帶級(jí)父文件夾目錄壓縮
- 壓縮包帶父級(jí)文件夾目錄
- 不指定目標(biāo)文件與路徑壓縮
- 指定壓縮包名稱不指定路徑壓縮
還是看代碼吧
#coding:utf-8 #壓縮解壓文件模塊 #支持中文路徑,支持多級(jí)目錄 #支持跨平臺(tái),在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 解壓目標(biāo)路徑 默認(rèn)解壓到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 壓縮包文件路徑 也可只傳文件名 默認(rèn)壓縮到filePath的父級(jí)目錄下 ''' 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; # 是否包含父級(jí)目錄壓縮 hasPDir=not filePath.endswith(os.sep); if not hasPDir: filePath=os.path.dirname(filePath); print filePath #校驗(yàn)備份文件路徑 if zipFilePath=='': zipFilePath=os.path.splitext(filePath)[0]+'.zip'; elif zipFilePath.find(os.sep)==-1:#只傳文件名的處理 zipFilePath=os.path.dirname(filePath)+os.sep+zipFilePath; #校驗(yàn)創(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]; #開(kāi)始?jí)嚎s 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__': #壓縮包不帶級(jí)父文件夾目錄 testdir='D:\\codeSource\\linuxAgent\\' zipFilePath='D:\\codeSource\\壓縮包不帶父級(jí)目錄.zip' exeZipFile(testdir,zipFilePath); #壓縮包帶父級(jí)文件夾目錄 testdir='D:\\codeSource\\linuxAgent'#不帶后綴斜線 zipFilePath='D:\\codeSource\\壓縮包帶父級(jí)目錄.zip' exeZipFile(testdir,zipFilePath); #不指定目標(biāo)文件與路徑壓縮 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);
好了!就這么多,如果你覺(jué)得有用就頂一下吧。有問(wèn)題也可以聯(lián)系我
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python文件與目錄操作技巧匯總》、《Python文本文件操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解
這篇文章主要為大家介紹了pandas數(shù)據(jù)探索之合并數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Python應(yīng)用開(kāi)發(fā)頻繁假死的問(wèn)題分析及解決
最近在開(kāi)發(fā)一款自動(dòng)化的應(yīng)用,但是,在測(cè)試時(shí),卻發(fā)現(xiàn)了問(wèn)題,當(dāng)我點(diǎn)擊暫停任務(wù)后,此時(shí)子線程被阻塞,如果我這個(gè)時(shí)候點(diǎn)擊停止,那么就會(huì)任務(wù)結(jié)束,之后,如果我再點(diǎn)擊開(kāi)始運(yùn)行,整個(gè)應(yīng)用就會(huì)卡死,所以本文介紹了Python應(yīng)用開(kāi)發(fā)頻繁假死的問(wèn)題分析及解決,需要的朋友可以參考下2024-08-08Python實(shí)現(xiàn)七彩蟒蛇繪制實(shí)例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)七彩蟒蛇繪制實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python 劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集的方法
今天小編就為大家分享一篇python 劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python解析html提取數(shù)據(jù),并生成word文檔實(shí)例解析
這篇文章主要介紹了python解析html提取數(shù)據(jù),并生成word文檔實(shí)例解析,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python2與python3中 for 循環(huán)語(yǔ)句基礎(chǔ)與實(shí)例分析
Python for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串,也是python中比較常用的一個(gè)函數(shù),這里通過(guò)基礎(chǔ)與實(shí)例給大家分享一下2017-11-11asyncio 的 coroutine對(duì)象 與 Future對(duì)象使用指南
asyncio是Python 3.4版本引入的標(biāo)準(zhǔn)庫(kù),直接內(nèi)置了對(duì)異步IO的支持。asyncio的編程模型就是一個(gè)消息循環(huán)。今天我們就來(lái)詳細(xì)討論下asyncio 中的 coroutine 與 Future對(duì)象2016-09-09python抓取京東價(jià)格分析京東商品價(jià)格走勢(shì)
本文介紹使用python抓取京東價(jià)格的代碼,用于分析京東商品價(jià)格走勢(shì)或者用于其它,大家參考使用吧2014-01-01