AI智能
改变未来

Python zipfile压缩文件和文件夹(支持多级目录)

支持压缩单个文件和多级文件夹

使用方法

zip_compress(to_zip,save_zip_name):#to_zip表示源文件或者源目录,save_zip_name表示目的zip文件(可带目录)

思路:

  1. 先判断目的文件目录是否存在,如果不存在,就创建;

  2. 判断被压缩的是文件还是目录

    如果是文件,直接压缩

  3. 如果是目录,遍历后逐一压缩

#!/usr/bin/env python3# -*- coding: utf-8 -*-import os,zipfiledef zip_compress(to_zip,save_zip_name):#save_zip_name是带目录的,也可以不带就是当前目录#1.先判断输出save_zip_name的上级是否存在(判断绝对目录),否则创建目录    save_zip_dir=os.path.split(os.path.abspath(save_zip_name))[0]#save_zip_name的上级目录    print(save_zip_dir)    if not os.path.exists(save_zip_dir):        os.makedirs(save_zip_dir)        print(\'创建新目录%s\'%save_zip_dir)    f = zipfile.ZipFile(os.path.abspath(save_zip_name),\'w\',zipfile.ZIP_DEFLATED)# 71f02.判断要被压缩的to_zip是否目录还是文件,是目录就遍历操作,是文件直接压缩    if not os.path.isdir(os.path.abspath(to_zip)):#如果不是目录,那就是文件        if os.path.exists(os.path.abspath(to_zip)):#判断文件是否存在            f.write(to_zip)            f.close()            print(\'%s压缩为%s\' % (to_zip, save_zip_name))        else:            print (\'%s文件不存在\'%os.path.abspath(to_zip))    else:        if os.path.exists(os.path.abspath(to_zip)):#判断目录是否存在,遍历目录            zipList = []            for dir,subdirs,files in os.walk(to_zip):#遍历目录,加入列表                for fileItem in files:                    zipList.append(os.path.join(dir,fileItem))                    # print(\'a\',zipList[-1])                for dirItem in subdirs:                    zipList.append(os.path.join(dir,dirItem))                    # print(\'b\',zipList[-1])            #读取列表压缩目录和文件            for i in zipList:                f.write(i,i.replace(to_zip,\'\'))#replace是减少压缩文件的一层目录,即压缩文件不包括to_zip这个目录                # print(\'%s压缩到%s\'%(i,save_zip_name))            f.close()            print(\'%s压缩为%s\' % (to_zip, save_zip_name))        else:            print(\'%s文件夹不存在\' % os.path.abspath(to_zip))

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python zipfile压缩文件和文件夹(支持多级目录)