Python3.7环境下如何按文件名t字段序列顺序正确排序显微镜图像
Python按文件名t字段数值排序显微镜图像文件方案
问题原因
Python内置的sorted()默认执行字符串字典序排序,在t字段数值位数不同时(比如t2和t10),字典序会将t10排在t2前面,无法匹配数值递增的排序需求。
实现方法
方法1:正则提取t字段数值(通用性强,代码简洁)
通过正则匹配提取t后的数字,转为整数作为排序依据:
import re file_list = [ "S18_b0s17t0c0x62672-1792y6689-1024.tif", "S18_b0s17t10c0x62672-1792y6689-1024.tif", "S18_b0s17t2c0x62672-1792y6689-1024.tif", "S18_b0s17t145c0x62672-1792y6689-1024" ] # 按t字段数值升序排序 sorted_file_list = sorted(file_list, key=lambda x: int(re.search(r"t(\d+)", x).group(1)))
方法2:字符串分割提取(性能更高,适合大数量文件场景)
如果文件名格式固定,可直接通过字符定位提取t字段数值,无需依赖正则:
def extract_t_value(filename): # 按下划线拆分取最后一段包含t字段的内容 target_part = filename.split("_")[-1] # 定位t和后续c的位置,截取中间的数字部分 t_start_idx = target_part.index("t") + 1 t_end_idx = target_part.index("c") return int(target_part[t_start_idx:t_end_idx]) sorted_file_list = sorted(file_list, key=extract_t_value)
注意事项
如果存在不符合命名规则的文件,可以在提取逻辑中添加异常捕获逻辑,返回默认排序值避免程序报错。
内容的提问来源于stack exchange,提问作者Minwoo Kang
相关产品推荐
相关产品推荐

