lists =[1, 5, 10, 8, 6]
lists.sort()
print(lists)
>>> [1, 5, 6, 8, 10]
file_list=[‘file1‘, ‘file101‘, ‘file102‘, ‘file103‘, ‘file11‘,
‘file12‘,‘file13‘, ‘file2‘, ‘file21‘, ‘file22‘, ‘file23‘, ‘file3‘]
# 文件夹名 按数字排序
file_list.sort(key=lambda x: int(x[4:])) # [4:]表示从字符第4位后开始排序
print(file_list)
# [‘file1‘, ‘file2‘, ‘file3‘, ‘file11‘, ‘file12‘, ‘file13‘,
# ‘file21‘, ‘file22‘, ‘file23‘, ‘file101‘, ‘file102‘, ‘file103‘]
lists = [1, 5, 10, 8, 6]
a = sorted(lists)
print(lists)
>>>[1, 5, 10, 8, 6]
print(a)
>>>[1, 5, 6, 8, 10]
lists = [(2, 5), (2, 3), (1, 2), (4, 2), (3, 4)]
lists.sort(key=lambda x: (x[0], x[1]))
print(lists)
>>>[(1, 2), (2, 3), (2, 5), (3, 4), (4, 2)]
我需要的是把Mframes0_EPI1.png,Mframes0_EPI10.png,Mframes0_EPI2.png,Mframes1_EPI10.png,Mframes10_EPI10.png,Mframes2_EPI10.png,Mframes2_EPI2.png
这样一系列的文件名进行排序。在字符型的数字比较中,10是排在2前面的,即Mframes0_EPI10.png
的排序在Mframes0_EPI2.png
前面,而我需要的是将Mframes0_EPI2.png
排在Mframes0_EPI10.png
前面。如果单纯的数字比较的话,直接加个int
转化为整型即可实现,但是这边的文件名不单包含了数字还包含了字母和格式。这就需要对文件名进行分割再排序的处理。
L = ‘+100+200+300+400+500+‘
print(L.split(‘+‘)) # 以‘‘+‘‘号为分割符
# 执行结果:[‘‘, ‘100‘, ‘200‘, ‘300‘, ‘400‘, ‘500‘, ‘‘]
import re
words = ‘我,来。上海?吃?上海菜‘
wordlist = re.split(‘,|。|?‘,words)
print(wordlist)
# output:[‘我‘, ‘来‘, ‘上海‘, ‘吃‘, ‘上海菜‘]
Mframes0_EPI1.png
中包含字母和格式,无法对其整体取整型int()
处理排序。所以需要对文件名进行分割后排序。Mframes0_EPI1.png
中的Mframes
、_EPI
和.png
去掉,然后通过sort()函数将留下的数字0
和1
取整型int()
,最后按第一优先级和第二优先级进行排序(也就是先排0这边的数字,再排1那边的数字)。valid_hr_img_list = [‘Mframes0_EPI1‘, ‘Mframes0_EPI10‘, ‘Mframes0_EPI11‘, ‘Mframes0_EPI12‘,
‘Mframes0_EPI13‘, ‘Mframes0_EPI14‘, ‘Mframes0_EPI15‘, ‘Mframes0_EPI16‘,‘Mframes0_EPI17‘,
‘Mframes0_EPI18‘, ‘Mframes1_EPI10‘, ‘Mframes3_EPI10‘, ‘Mframes4_EPI10‘, ‘Mframes399_EPI96‘,
‘Mframes0_EPI19‘, ‘Mframes0_EPI2‘, ‘Mframes0_EPI20‘]
valid_hr_img_list.sort(key=lambda x: (int(re.split(‘Mframes|_EPI|.png‘,x)[1]),int(re.split(‘Mframes|_EPI|.png‘,x)[2])))
print(valid_hr_img_list)
# [‘Mframes0_EPI1‘, ‘Mframes0_EPI2‘, ‘Mframes0_EPI10‘, ‘Mframes0_EPI11‘, ‘Mframes0_EPI12‘,
# ‘Mframes0_EPI13‘, ‘Mframes0_EPI14‘, ‘Mframes0_EPI15‘, ‘Mframes0_EPI16‘, ‘Mframes0_EPI17‘,
# ‘Mframes0_EPI18‘, ‘Mframes0_EPI19‘, ‘Mframes0_EPI20‘, ‘Mframes1_EPI10‘, ‘Mframes3_EPI10‘,
# ‘Mframes4_EPI10‘, ‘Mframes399_EPI96‘]
可以清楚看到排序后的结果:Mframes0_EPI2.png是排在Mframes0_EPI10.png前面的,排序正确。
[1] Python文件名排序或文件排序问题
[2] 文件名(文件夹名) 排序: 按字符串排序、 按数字排序 Python
[3] python对目录下的文件进行 多条件排序
[4] Python之split()函数
[5] 在python 中split()使用多符号分割的例子
码字不易,如果您觉得有帮助,麻烦点个赞再走呗~
python下使用sort()函数对目录下文件名进行多条件排序
原文:https://www.cnblogs.com/Kobaayyy/p/12581248.html