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

Python无需解压Zip包提取指定子目录下的.jp2文件列表

直接读取Zip内符合规则的.jp2文件路径

解决方案:用Python的zipfile模块结合fnmatch筛选

不用解压整个Zip包,直接通过zipfile遍历压缩包内的所有文件条目,再用fnmatch匹配你需要的路径规则,完全复现原来glob的筛选逻辑。

单Zip文件处理代码

import zipfile
import fnmatch

zip_path = r'C:\path-to-your-zip\S2A_MSIL2A_20170420T103021_N0204_R108_T32UNB_20170420T103454.zip'
# 对应原glob的匹配规则,适配Zip内部路径格式
pattern = '*SAFE/**/IMG_DATA/**/R60m/*B??_??m.jp2'

jp2_files = []
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
    # 遍历Zip内所有文件条目
    for file_info in zip_ref.infolist():
        # 跳过目录,只处理文件
        if not file_info.is_dir():
            # 用fnmatch匹配路径规则
            if fnmatch.fnmatch(file_info.filename, pattern):
                jp2_files.append(file_info.filename)

# 输出筛选后的文件路径
for file in jp2_files:
    print(file)

多Zip文件批量处理

如果要自动化处理多个Zip文件,可以封装成函数:

import zipfile
import fnmatch
import os

def get_jp2_from_zips(zip_dir):
    jp2_all = []
    # 遍历目标目录下所有.zip文件
    for filename in os.listdir(zip_dir):
        if filename.endswith('.zip'):
            zip_path = os.path.join(zip_dir, filename)
            pattern = '*SAFE/**/IMG_DATA/**/R60m/*B??_??m.jp2'
            with zipfile.ZipFile(zip_path, 'r') as zip_ref:
                for file_info in zip_ref.infolist():
                    if not file_info.is_dir() and fnmatch.fnmatch(file_info.filename, pattern):
                        # 带上Zip文件名,方便后续区分文件来源
                        jp2_all.append(f"{zip_path}::{file_info.filename}")
    return jp2_all

# 使用示例
target_dir = r'C:\your-zip-folder'
all_jp2 = get_jp2_from_zips(target_dir)
for item in all_jp2:
    print(item)

关键说明

  • zipfile.ZipFile:以只读模式打开Zip包,无需解压即可访问内部所有条目
  • fnmatch.fnmatch:支持和glob完全一致的通配符语法,完美复现你原来的筛选逻辑
  • 跳过目录条目:通过file_info.is_dir()判断,避免把目录路径混入结果列表
  • 若需要直接读取.jp2文件内容,可通过zip_ref.open(file_info.filename)获取文件对象,直接进行后续处理(比如用GDAL读取影像),全程无需解压。

内容的提问来源于stack exchange,提问作者KosV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:50:25