Python实现首字符为数字的文件名自然排序的方法
按文件名中的数字实现自然排序
直接调用mylist.sort()时,列表会按字符串字典序排序,导致数字排序不符合预期。要实现按文件名中的数字大小排序,可通过自定义sort()方法的key参数来实现,以下是两种实用方案:
方案1:正则匹配提取数字(通用场景)
如果数字在文件名中的位置不固定(不一定在开头),用正则表达式匹配出文件名中的数字部分,转成整数作为排序依据:
import re mylist = ['0_sound.wav', '10_sound.wav', '15_sound.wav', '20_sound.wav', '5_sound.wav'] # 匹配文件名中的连续数字,取第一个匹配结果转整数 mylist.sort(key=lambda x: int(re.search(r'\d+', x).group())) print(mylist) # 输出:['0_sound.wav', '5_sound.wav', '10_sound.wav', '15_sound.wav', '20_sound.wav']
若数字仅出现在文件名开头,可将正则改为r'^\d+',匹配效率更高。
方案2:字符串分割提取数字(格式固定场景)
如果文件名格式固定(数字和其他内容以下划线分隔,且数字是第一个部分),可以直接分割字符串提取数字:
mylist = ['0_sound.wav', '10_sound.wav', '15_sound.wav', '20_sound.wav', '5_sound.wav'] # 按下划线分割,取第一个元素转整数 mylist.sort(key=lambda x: int(x.split('_')[0])) print(mylist) # 输出:['0_sound.wav', '5_sound.wav', '10_sound.wav', '15_sound.wav', '20_sound.wav']
内容的提问来源于stack exchange,提问作者Data Mastery
相关产品推荐
相关产品推荐

