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')