python zip压缩文件、文件夹

import os,zipfile


class ZipFileUtil:

    def __init__(self,zip_file_path):
        self.zip_path = zip_file_path
        self.f = zipfile.ZipFile(zip_file_path, 'w',zipfile.ZIP_DEFLATED)

    def zip_file(self,src_path):
        '''
        压缩文件
        :param zip_path: 压缩包路径
        :param src_path: 要压缩的文件路径,可以是 str
        :return:
        '''
        name = os.path.basename(src_path)
        self.f.write(src_path,name)

    def zip_dir(self,src_path):
        '''
        压缩目录
        :return:
        '''
        src_folder = os.path.basename(src_path)
        sep = os.path.sep
        # 是否第一层,如果第一层,且空目录,压缩时不设置父目录;如果不是第一层,且空目录,压缩时要有父目录
        is_first = True
        # 目录的压缩包
        for (archiveDirPath, dirNames, fileNames) in os.walk(src_path):
            for fileName in fileNames:
                file_path = os.path.join(archiveDirPath, fileName)

                name_temp = file_path.replace(src_path, "")
                self.f.write(file_path, src_folder+sep+name_temp)
            # 包含空目录
            if not fileNames and not dirNames:
                name_temp = os.path.basename(archiveDirPath)
                if is_first:
                    zip_info = zipfile.ZipInfo(name_temp + "/")
                else:
                    zip_info = zipfile.ZipInfo(src_folder+sep+name_temp + "/")

                self.f.writestr(zip_info, "")

            is_first = False

    def close(self):
        self.f.close()


if __name__ == "__main__":

    zip_path = r'E:\abc2.zip'
    if os.path.exists(zip_path):
        os.remove(zip_path)

    zipObj = ZipFileUtil(zip_path)
    zipObj.zip_dir(r'E:\啊啊啊32')
    zipObj.zip_file(r'E:\2.txt')
    zipObj.close()

原文出处:/show_1IX7b7Kd8PUv.html