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
相关产品推荐
相关产品推荐

