如何根据文件名中的数字对av_v5系列tif文件按年分组排序
问题原因
你当前使用的排序逻辑仅提取了文件名末尾的序列号作为唯一排序依据,会导致所有年份的同号文件被归为一类,自然无法实现同一年份文件连续排列的需求。
解决方法
将年份和序列号共同作为复合排序key即可,排序时会优先按年份升序排列,同一年份下再按序列号升序排列,完全符合你的预期:
sorted(tif_files, key=lambda x: (x.split('_')[2], x.split('_')[-1][:-4]))
逻辑说明
文件名按_切割后得到的列表中,索引为2的元素就是年份字段,和后续的序列号组成元组作为排序key。Python对元组排序时会依次比较元组内的元素,先比较第一个元素(年份),相同的情况下再比较第二个元素(序列号)。
如果需要更稳妥的排序逻辑,避免字符串排序的潜在问题,可以将两个字段转为整数:
sorted(tif_files, key=lambda x: (int(x.split('_')[2]), int(x.split('_')[-1][:-4])))
转为整数后,即使后续文件名的序列号取消补零(比如从001变成1),也能按照数值大小正常排序,不会出现'10' < '2'这类字符串排序的异常问题。
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

