欢迎光临散文网 会员登陆 & 注册

QPython 3C 操作 压缩包

2021-07-27 05:37 作者:乘着船  | 我要投稿

# 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):

#主函数:参数分别是 源文件夹绝对路径,目标压缩文件绝对路径,目标压缩文件里_路径类型_(默认0=源文件夹_下级路径,1=源文件夹_本级路径,2=文件系统_根路径,-1=源文件夹_下级路径_二次压缩),打印具体信息

    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)

#创建zip文件。参数w表示写模式。zipfile.ZIP_DEFLATED表示需要压缩,文件会变小。ZIP_STORED是单纯的复制,文件大小没变。

    if Print:

        prt=print

    else:

        prt=lambda s:None

    prt('<创建文件" %s "成功,开始压缩>'%absZipFile)

    writeAllFileToZip(absDir,Zipfile) #开始压缩

    Zipfile.close()

    if PathType<0:

        prt('<进行二级压缩>')

        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("<压缩成功>")


#定义一个函数,递归读取absDir文件夹中所有文件,并塞进absZipFile文件中。

def writeAllFileToZip(absDir,Zipfile):

    global absDirLen,prt

    for f in listdir(absDir):

        absFile=Join(absDir,f) #子文件的绝对路径

        relFile=absFile[absDirLen:] #改成相对路径,否则解压zip是/User/xxx开头的文件。

        prt(relFile)

        try:

            Zipfile.write(relFile)

        except ValueError:

#空白时间文件,重写后继续

            shutil.copy(relFile,relFile+'_')

            shutil.move(relFile+'_',relFile)

            Zipfile.write(relFile)

        if isdir(absFile): #判断是文件夹,继续深度读取。递归操作

            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目标压缩文件,srcFolder源文件夹))


# 7z 压缩文件夹(带密码,加密文件名)


import os

os.system("7z a '%s' '%s' -p'%s' -mhe"%(destFile目标压缩文件,srcFolder源文件夹,passWord密码))


# 7z 解压文件夹


import os

os.system("7z x -o'%s' '%s'"%(destFolder目标文件夹,srcFile源压缩文件))


# 7z 解压文件夹(带密码)


import os

os.system("7z x -o'%s' '%s' -p'%s'"%(destFolder目标文件夹,srcFile源压缩文件,passWord密码))


# 7z 视频演示https://www.bilibili.com/video/BV1TV411s7VZ


作者:乘着船@Bilibili

更多文章+下载链接:https://www.bilibili.com/read/readlist/rl321663


QPython 3C 操作 压缩包的评论 (共 条)

分享到微博请遵守国家法律