QPython 3C 操作 壓縮包
# zipfile 壓縮文件夾
import os,shutil,zipfile #引入zip管理模塊
isdir=os.path.isdir
listdir=os.listdir
Join=os.path.join
getcwd=os.getcwd
def ZipFiles(absDir,absZipFile=None,PathType=0,Print=1):
#主函數(shù):參數(shù)分別是 源文件夾絕對(duì)路徑,目標(biāo)壓縮文件絕對(duì)路徑,目標(biāo)壓縮文件里_路徑類型_(默認(rèn)0=源文件夾_下級(jí)路徑,1=源文件夾_本級(jí)路徑,2=文件系統(tǒng)_根路徑,-1=源文件夾_下級(jí)路徑_二次壓縮),打印具體信息
? ? global absDirLen,prt
? ? if not absZipFile:
? ? ? ? absZipFile=absDir+'.zip'
? ? OriPath=getcwd()
? ? if PathType==1:
? ? ? ? newDir=absDir[:absDir.rfind('/')]
? ? elif PathType==2:
? ? ? ? absDirLen=0
? ? else:
? ? ? ? newDir=absDir
? ? if PathType<2:
? ? ? ? absDirLen=len(newDir)+1
? ? ? ? os.chdir(newDir)
? ? if PathType<0:
? ? ? ? ZipCompress=zipfile.ZIP_STORED
? ? else:
? ? ? ? ZipCompress=zipfile.ZIP_DEFLATED
? ? Zipfile=zipfile.ZipFile(absZipFile,"w",ZipCompress)
#創(chuàng)建zip文件。參數(shù)w表示寫模式。zipfile.ZIP_DEFLATED表示需要壓縮,文件會(huì)變小。ZIP_STORED是單純的復(fù)制,文件大小沒變。
? ? if Print:
? ? ? ? prt=print
? ? else:
? ? ? ? prt=lambda s:None
? ? prt('<創(chuàng)建文件" %s "成功,開始?jí)嚎s>'%absZipFile)
? ? writeAllFileToZip(absDir,Zipfile) #開始?jí)嚎s
? ? Zipfile.close()
? ? if PathType<0:
? ? ? ? prt('<進(jìn)行二級(jí)壓縮>')
? ? ? ? os.chdir(os.path.dirname(absZipFile))
? ? ? ? Zipfile=zipfile.ZipFile(absZipFile+'.zip',"w",zipfile.ZIP_DEFLATED)
? ? ? ? Zipfile.write(os.path.basename(absZipFile))
? ? ? ? Zipfile.close()
? ? ? ? shutil.move(absZipFile+'.zip',absZipFile)
? ? os.chdir(OriPath)
? ? prt("<壓縮成功>")
#定義一個(gè)函數(shù),遞歸讀取absDir文件夾中所有文件,并塞進(jìn)absZipFile文件中。
def writeAllFileToZip(absDir,Zipfile):
? ? global absDirLen,prt
? ? for f in listdir(absDir):
? ? ? ? absFile=Join(absDir,f) #子文件的絕對(duì)路徑
? ? ? ? relFile=absFile[absDirLen:] #改成相對(duì)路徑,否則解壓zip是/User/xxx開頭的文件。
? ? ? ? prt(relFile)
? ? ? ? try:
? ? ? ? ? ? Zipfile.write(relFile)
? ? ? ? except ValueError:
#空白時(shí)間文件,重寫后繼續(xù)
? ? ? ? ? ? shutil.copy(relFile,relFile+'_')
? ? ? ? ? ? shutil.move(relFile+'_',relFile)
? ? ? ? ? ? Zipfile.write(relFile)
? ? ? ? if isdir(absFile): #判斷是文件夾,繼續(xù)深度讀取。遞歸操作
? ? ? ? ? ? writeAllFileToZip(absFile,Zipfile)
? ? return
absDirLen=prt=-1
__all__=('ZipFiles','os','shutil','zipfile')
# zipfile 解壓文件夾
import zipfile
def unZipFiles(src,dst=None):
? ? if dst==None:
? ? ? ? if src[-4:].lower()=='.zip':
? ? ? ? ? ? dst=src[:-4]
? ? ? ? else:
? ? ? ? ? ? return
? ? zipfile.ZipFile(src,'r').extractall(dst)
# 7z 壓縮文件夾
import os
os.system("7z a '%s' '%s'"%(destFile目標(biāo)壓縮文件,srcFolder源文件夾))
#?7z 壓縮文件夾(帶密碼,加密文件名)
import os
os.system("7z a?'%s' '%s' -p'%s' -mhe"%(destFile目標(biāo)壓縮文件,srcFolder源文件夾,passWord密碼))
# 7z 解壓文件夾
import os
os.system("7z x -o'%s' '%s'"%(destFolder目標(biāo)文件夾,srcFile源壓縮文件))
# 7z 解壓文件夾(帶密碼)
import os
os.system("7z x?-o'%s' '%s' -p'%s'"%(destFolder目標(biāo)文件夾,srcFile源壓縮文件,passWord密碼))
# 7z 視頻演示: https://www.bilibili.com/video/BV1TV411s7VZ
作者:乘著船@Bilibili
更多文章+下載鏈接:https://www.bilibili.com/read/readlist/rl321663