Python如何按文件名匹配规则将main数组内文件分组生成独立列表
Python图像文件名分组最优实现
核心思路
不要硬编码生成List_01/List_02这类零散独立变量,用字典作为分组容器是可维护性、扩展性最高的方案,核心逻辑只有两步:
- 从每个文件名中提取对应的分类关键词(比如示例中的
Sun/Moon) - 将同关键词的图像对象/文件路径归集到字典对应键的列表下
不推荐动态生成独立变量的原因:分类数量随文件变化时,动态变量会让后续调用、遍历逻辑极其混乱,字典既支持按键快速取对应分组,也支持直接遍历全部分组做批处理。
可直接复用的代码
import re from collections import defaultdict # 这里替换成你遍历目录得到的105张图像的数组,元素支持文件名字符串、自定义图像对象 Mainlist = ["Image_Sun_01", "Image_Sun_02", "Image_Moon_01"] # 初始化分组字典,不存在的分类键会自动创建空列表 img_groups = defaultdict(list) for img_item in Mainlist: # 提取分类关键词:适配Image_<分类词>_<序号>的命名规则,自动兼容.jpg/.png等后缀、大小写差异 # 如果你的命名结构有变化,只需要修改这行的正则规则即可 match_res = re.match(r"Image_([a-zA-Z]+)_\d+", img_item, re.IGNORECASE) if match_res: category_tag = match_res.group(1) img_groups[category_tag].append(img_item) # 如果必须要你示例里的编号列表格式,直接按顺序取值即可 all_group_list = list(img_groups.values()) # 按分组出现顺序赋值,有多少个分组就取多少个,不需要提前固定数量 List_01 = all_group_list[0] List_02 = all_group_list[1]
运行效果
执行后分组字典内容如下,和你预期的归类结果完全一致:
{ "Sun": ["Image_Sun_01", "Image_Sun_02"], "Moon": ["Image_Moon_01"] }
适配调整说明
- 如果分类关键词位置不固定:可以提前维护你要匹配的关键词列表
keywords = ["Sun", "Moon", "Star"],遍历时判断文件名包含哪个关键词就归集到对应分组 - 如果数组元素是图像对象而非文件名:把正则匹配部分的
img_item替换成获取文件名的属性即可,比如img_item.filename - 如果需要自定义分组排序:对
all_group_list做自定义排序后再赋值给对应编号的列表即可
内容的提问来源于stack exchange,提问作者Marco N.
相关产品推荐
相关产品推荐

