如何在Python中按指定顺序将符合命名规则的图片加载到列表中
按数字序号加载图片的实现方案
核心问题是glob.glob返回的文件名默认按字符串字典序排序,不会自动识别文件名中的数字做数值排序,你可以先对匹配到的文件列表做自定义排序后再加载图片,代码示例如下:
import glob from PIL import Image featured_list = [] # 匹配所有符合规则的文件 file_list = glob.glob("FEATURED*.png") # 按文件名中的数字序号升序排序 file_list.sort(key=lambda file_name: int(file_name.split("_")[1].split(".")[0])) # 遍历排序后的列表加载图片 for file_path in file_list: img = Image.open(file_path) featured_list.append(img)
排序逻辑说明:对每个文件名做两次拆分,先按下划线_拆分取后半部分,再按.拆分取数字部分,转为整数后作为排序依据,完全匹配你当前的命名规则,哪怕后续序号增长到两位、三位也能正确排序,不会出现FEATURED_10排在FEATURED_2前面的字符串排序问题。
如果要适配更复杂的路径场景(比如图片存在子文件夹中,路径包含其他分隔符),可以用正则表达式提取序号,鲁棒性更强:
import glob import re import os from PIL import Image featured_list = [] file_list = glob.glob("**/FEATURED*.png", recursive=True) # 支持递归查找子文件夹 file_list.sort(key=lambda path: int(re.search(r"FEATURED_(\d+)\.png", os.path.basename(path)).group(1))) for path in file_list: featured_list.append(Image.open(path))
内容的提问来源于stack exchange,提问作者helpmepleaae
相关产品推荐
相关产品推荐

