使用Python批量创建ZIP文件:栅格文件按日期分组压缩需求
批量按文件名前缀压缩对应文件到同名ZIP
嘿,作为Python新手能写出单组文件的压缩代码已经很棒啦!针对你需要批量按前缀压缩的需求,我们可以通过自动提取并去重文件名前缀,再循环处理每个前缀来实现,不用手动修改文件名重复写代码。
完整实现代码
import os import zipfile # 目标文件夹路径,建议用raw字符串避免转义字符问题 target_dir = r'F:\AOS_input' # 第一步:收集所有需要处理的文件名前缀(自动去重) prefixes = set() for folder, subfolders, files in os.walk(target_dir): for file in files: # 提取你需要的前缀(对应"L5_xxxxxx"格式,取前9个字符) prefix = file[:9] prefixes.add(prefix) # 第二步:循环处理每个前缀,生成对应ZIP文件 for prefix in prefixes: # 动态生成ZIP文件名,和前缀保持一致 zip_filename = os.path.join(target_dir, f'{prefix}.zip') # 使用with语句自动管理ZIP文件,避免手动关闭的麻烦 with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zip_file: # 遍历文件夹找到所有当前前缀的文件 for folder, subfolders, files in os.walk(target_dir): for file in files: if file.startswith(prefix): file_full_path = os.path.join(folder, file) # 写入ZIP时保留原文件名,避免带层级路径 zip_file.write(file_full_path, file) print(f"已完成压缩:{zip_filename}")
关键部分解释
- 用集合收集前缀:
set()会自动帮你去掉重复的前缀,避免同一个前缀被重复处理,效率更高。 - 动态生成ZIP文件:通过f-string
f'{prefix}.zip'直接把前缀作为ZIP文件名,完全不用手动逐个修改。 with语句的优势:相比你原来手动调用close(),with会在代码块结束后自动关闭ZIP文件,更安全也更简洁。- raw字符串路径:
r'F:\AOS_input'避免了路径中\被当成转义字符的问题,这是新手很容易踩的坑哦。
灵活调整提示
如果你的前缀长度不固定(比如有的是L7_202301,有的是S2_20240510),可以按分隔符来提取前缀:
# 按第一个下划线分割,取前两部分拼接成前缀(比如"S2_20240510"会被提取为"S2_20240510") prefix = '_'.join(file.split('_')[:2])
这样不管前缀长度如何,只要格式是[标识]_[日期]就能正确提取。
注意事项
- 确保目标文件夹有读写权限,否则会出现权限报错。
- 如果文件夹里有无关文件,代码只会处理符合前缀规则的文件,不用担心误压缩。
内容的提问来源于stack exchange,提问作者Maria Kayed
相关产品推荐
相关产品推荐

