python zipfile 压缩文件夹的方法

import os
import zipfile


# 这一部分只是用来解释os.walk的用法,在该脚本运行时不需执行------start
dirpath = r'f:\0105\Europe_output\chinaocean'  # 这里指定需要压缩的文件夹
for path, dirnames, filenames in os.walk(dirpath):  # 遍历文件夹及下面的子文件夹,path、dirnames、filenames依次是路径、目录名称、文件名称。
# path是当前路径,dirnames是在当前路径下有文件夹时,给出文件夹名的列表,filenames是在当前路径下有文件时,给出文件名的列表
# 之后进入列表dirnames中的第一个文件夹,重复上述过程。
    # 下面print出来可以更好体会os.walk的用法
    print(path)
    print(dirnames)
    print(filenames)
    fpath = path.replace(dirpath, '')  # 把主路径去掉,只保留分路径,这样在压缩文件时就不会把需要压缩的文件夹的上层路径压缩进去
    print(fpath)
# 这一部分只是用来解释os.walk的用法,在该脚本运行时不需执行------end


def getZipDir(dirpath, outFullName):
    """
    压缩指定文件夹
    :param dirpath: 目标文件夹路径
    :param outFullName: 压缩文件保存路径+xxxx.zip
    :return: 无
    """
    zip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)  # outFullName为压缩文件的完整路径
    for path, dirnames, filenames in os.walk(dirpath):
        # 去掉目标跟路径,只对目标文件夹下边的文件及文件夹进行压缩
        fpath = path.replace(dirpath, '')

        for filename in filenames:
            zip.write(os.path.join(path, filename), os.path.join(fpath, filename))
    zip.close()


if __name__ == '__main__':
    areas = ['chinaocean', 'NWPacific', 'NEPacific', 'SWPacific', 'SEPacific', 'IndianOcean']
    for area in areas:
        getZipDir('F:/0105/json_output/' + area, 'F:/0105/json_output/' + area + '.zip')

你可能感兴趣的