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

Python如何从指定格式tif文件名中提取片段生成对应下载路径

Python实现文件名转目标下载路径的方案

你之前的正则_(.+?)_只会匹配第一个和第二个下划线之间的内容,仅能提取到月份字段,没有覆盖所有需要的分组,所以无法完成完整路径拼接。推荐两种实现方案:


方案1:字符串分割法(逻辑简单,优先推荐)

按下划线固定位置拆分字段,不需要复杂正则,适配100%符合命名规则的文件场景:

import os

def filename2path(filename):
    # 按下划线拆分文件名
    parts = filename.split('_')
    # 校验文件名格式合法性
    if len(parts) != 8 or not parts[-1].endswith('.tif'):
        raise ValueError(f"文件名{filename}不符合规范")
    # 提取字段,月份转整数自动去除前导零
    year = parts[0]
    month = str(int(parts[1]))
    middle_section = f"{parts[2]}_{parts[3]}_{parts[4]}_{parts[5]}_{parts[6]}"
    tif_filename = parts[7]
    # 拼接目标路径
    return f"{year}/{month}/{middle_section}/{tif_filename}"

# 测试样例
test_file = "2017_05_S2B_7VEG_20170528_0_L2A_B01.tif"
print(filename2path(test_file))
# 输出:2017/5/S2B_7VEG_20170528_0_L2A/B01.tif

# 遍历指定目录所有tif文件生成路径示例
file_dir = "./你的本地文件目录"
for fname in os.listdir(file_dir):
    if fname.endswith('.tif'):
        try:
            target_path = filename2path(fname)
            # 这里补充你的下载逻辑
            print(target_path)
        except ValueError as e:
            print(f"跳过异常文件:{e}")

方案2:正则匹配法(适合需要严格过滤非法文件的场景)

用正则分组严格匹配所有字段,自动排除不符合命名规则的杂文件:

import re
import os

# 预编译正则,按字段分组
pattern = re.compile(r'^(\d{4})_(\d{2})_([^_]+)_([^_]+)_(\d+)_0_L2A_(B\d{2}\.tif)$')

def filename2path(filename):
    match_res = pattern.match(filename)
    if not match_res:
        raise ValueError(f"文件名{filename}不符合规范")
    year = match_res.group(1)
    month = str(int(match_res.group(2)))
    middle_section = f"{match_res.group(3)}_{match_res.group(4)}_{match_res.group(5)}_0_L2A"
    tif_filename = match_res.group(6)
    return f"{year}/{month}/{middle_section}/{tif_filename}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:36:02