如何按(x,y)值(先y后x)对指定格式的文件名列表排序?
按y坐标优先、x坐标次之排序文件名列表
针对格式为output_y:{y}_x:{x}.png.png的文件名列表,实现先按y数值排序、y相同时按x数值排序的逻辑,可通过以下两种方式实现:
方法一:正则表达式提取坐标(推荐,适配格式小变动)
利用正则精准捕获文件名中的y和x数值,作为排序依据:
import re # 替换为你的文件名列表 file_list = [ "output_y:2_x:3.png.png", "output_y:1_x:5.png.png", "output_y:2_x:1.png.png", "output_y:3_x:2.png.png" ] # 匹配y和x的数字部分 coord_pattern = re.compile(r'output_y:(\d+)_x:(\d+)\.png\.png') # 按y→x的顺序排序 sorted_files = sorted(file_list, key=lambda fname: ( int(coord_pattern.search(fname).group(1)), int(coord_pattern.search(fname).group(2)) )) # 输出排序结果 for f in sorted_files: print(f)
方法二:字符串分割提取坐标(格式固定时使用)
如果文件名格式完全统一,可直接通过字符串分割提取数值:
# 替换为你的文件名列表 file_list = [ "output_y:2_x:3.png.png", "output_y:1_x:5.png.png", "output_y:2_x:1.png.png", "output_y:3_x:2.png.png" ] # 按y→x的顺序排序 sorted_files = sorted(file_list, key=lambda fname: ( int(fname.split('_y:')[1].split('_x:')[0]), int(fname.split('_x:')[1].split('.png.png')[0]) )) # 输出排序结果 for f in sorted_files: print(f)
逻辑说明
两种方法的核心都是通过sorted函数的key参数返回**(y数值, x数值)**的元组:Python在比较元组时会优先比较第一个元素(y值),只有当y值相等时才会比较第二个元素(x值),完全符合你需要的排序规则。
内容的提问来源于stack exchange,提问作者user20384021
相关产品推荐
相关产品推荐

