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

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

使用方法app

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

思路:
ide

  1. 先判断目的文件目录是否存在,若是不存在,就建立;spa

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

    1. 若是是文件,直接压缩utf-8

    2. 若是是目录,遍历后逐一压缩
      ci

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os,zipfile

def 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)
# 2.判断要被压缩的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))
相关文章
相关标签/搜索