You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何递归提取嵌套ZIP中fire_bundle下的_dnbr6.tif文件?

解决方案:递归提取嵌套ZIP中的目标文件

可以用Python的zipfile库实现需求,无需解压所有文件,仅在遇到符合条件的嵌套ZIP时递归处理,直接提取目标文件到指定目录。以下是完整实现:

核心逻辑

  • 递归遍历ZIP内的每个成员
  • 匹配到_dnbr6.tif结尾的文件直接提取
  • 遇到名称含fire_bundle(大小写不敏感)的ZIP文件时,读取其字节流并递归处理,无需先保存到本地

代码实现

import zipfile
import os
from io import BytesIO

def extract_target_files(zip_ref, output_dir):
    """
    递归处理ZIP文件,提取目标文件
    :param zip_ref: 已打开的zipfile.ZipFile对象
    :param output_dir: 提取文件的输出目录
    """
    os.makedirs(output_dir, exist_ok=True)
    
    for item in zip_ref.infolist():
        # 匹配目标文件:文件名以_dnbr6.tif结尾(大小写不敏感)
        if item.filename.lower().endswith('_dnbr6.tif'):
            zip_ref.extract(item, output_dir)
            print(f"已提取: {item.filename}")
            continue
        
        # 匹配符合条件的嵌套ZIP:是文件、含zip后缀、名称包含fire_bundle(大小写不敏感)
        if (not item.is_dir() 
            and '.zip' in item.filename.lower() 
            and 'fire_bundle' in item.filename.lower()):
            # 读取嵌套ZIP的字节流,在内存中处理
            nested_zip_data = zip_ref.read(item.filename)
            with zipfile.ZipFile(BytesIO(nested_zip_data), 'r') as nested_zip:
                print(f"递归处理嵌套ZIP: {item.filename}")
                extract_target_files(nested_zip, output_dir)

def main(input_zip_path, output_dir):
    """
    主函数:处理顶层ZIP文件
    :param input_zip_path: 顶层ZIP文件的路径
    :param output_dir: 提取文件的输出目录
    """
    with zipfile.ZipFile(input_zip_path, 'r') as top_zip:
        extract_target_files(top_zip, output_dir)

if __name__ == "__main__":
    # 替换为你的顶层ZIP路径和输出目录
    INPUT_ZIP = "path/to/your/top_level.zip"
    OUTPUT_DIR = "extracted_dnbr6_files"
    main(INPUT_ZIP, OUTPUT_DIR)

关键细节说明

  • 无冗余解压:嵌套ZIP通过BytesIO在内存中读取处理,不会将无关文件写入磁盘
  • 大小写兼容:所有文件名转小写后判断,适配Fire_Bundle.zip、FIRE_BUNDLE等不同大小写的情况
  • 重名处理:默认重名文件会覆盖,可自行添加逻辑(比如给文件名加嵌套路径前缀)避免冲突
  • 目录过滤:通过item.is_dir()跳过目录成员,只处理文件类型的内容

内容的提问来源于stack exchange,提问作者Guillermo.D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 14:03:25