如何按文件名中的日期子串分组查找目录中的文件集合
按日期分组查找土壤湿度文件的方法
你可以通过提取文件名中的日期子串,再用字典对文件进行分组的方式,实现动态匹配相同日期的文件集合。以下是具体实现方案:
核心思路
- 用
glob获取所有符合命名格式的文件路径 - 从每个文件名中提取出日期部分(即
YYYYMMD格式的子串) - 以日期为键,将对应文件路径存入字典的列表中,最终得到按日期分组的文件集合
实现代码
基础版(字符串拆分)
这种方式适合命名格式固定的场景:
import glob import os from collections import defaultdict # 初始化字典,用于按日期分组存储文件 date_file_groups = defaultdict(list) # 获取所有目标文件 for file_path in glob.glob('/dir/soil_moisture_*_sm_global.tif'): # 提取文件名(去掉路径) filename = os.path.basename(file_path) # 拆分文件名获取日期部分:从第二个下划线后、T之前的内容 date_time_part = filename.split('_')[1] date_str = date_time_part.split('T')[0] # 将文件路径加入对应日期的列表 date_file_groups[date_str].append(file_path) # 输出分组结果 for date, files in date_file_groups.items(): print(f"日期 {date} 的文件列表:") for f in files: print(f" {f}")
健壮版(正则表达式)
如果文件名格式可能有微小变化,用正则表达式提取日期更可靠:
import glob import os import re from collections import defaultdict date_file_groups = defaultdict(list) # 正则匹配日期部分:匹配soil_moisture_之后、T之前的数字串 date_pattern = re.compile(r'soil_moisture_(\d+)T') for file_path in glob.glob('/dir/soil_moisture_*_sm_global.tif'): filename = os.path.basename(file_path) match_result = date_pattern.search(filename) if match_result: date_str = match_result.group(1) date_file_groups[date_str].append(file_path) # 遍历输出分组 for date, files in date_file_groups.items(): print(f"\n=== 日期 {date} ===") for f in files: print(f)
说明
- 使用
defaultdict可以自动为新日期创建空列表,无需手动判断键是否存在 os.path.basename比直接用split('/')更适配不同操作系统的路径格式- 正则表达式的方式能应对文件名中可能出现的格式变动(比如下划线数量微调)
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

