facefile = os.listdir(path + '/' + each_class_name + '/' + each_videofile + '/' + facefiles) facefile.sort() print(facefile) facefile.sort(key= lambda x: int(str(x[20:-4]))) print(facefile)
输出:['082315_w_60-BL1-083_102.jpg', '082315_w_60-BL1-083_108.jpg', '082315_w_60-BL1-083_114.jpg', '082315_w_60-BL1-083_12.jpg', '082315_w_60-BL1-083_120.jpg', '082315_w_60-BL1-083_126.jpg', '082315_w_60-BL1-083_132.jpg', '082315_w_60-BL1-083_18.jpg', '082315_w_60-BL1-083_24.jpg', '082315_w_60-BL1-083_30.jpg', '082315_w_60-BL1-083_36.jpg', '082315_w_60-BL1-083_42.jpg', '082315_w_60-BL1-083_48.jpg', '082315_w_60-BL1-083_54.jpg', '082315_w_60-BL1-083_6.jpg', '082315_w_60-BL1-083_60.jpg', '082315_w_60-BL1-083_66.jpg', '082315_w_60-BL1-083_72.jpg', '082315_w_60-BL1-083_78.jpg', '082315_w_60-BL1-083_84.jpg', '082315_w_60-BL1-083_90.jpg', '082315_w_60-BL1-083_96.jpg']
['082315_w_60-BL1-083_6.jpg', '082315_w_60-BL1-083_12.jpg', '082315_w_60-BL1-083_18.jpg', '082315_w_60-BL1-083_24.jpg', '082315_w_60-BL1-083_30.jpg', '082315_w_60-BL1-083_36.jpg', '082315_w_60-BL1-083_42.jpg', '082315_w_60-BL1-083_48.jpg', '082315_w_60-BL1-083_54.jpg', '082315_w_60-BL1-083_60.jpg', '082315_w_60-BL1-083_66.jpg', '082315_w_60-BL1-083_72.jpg', '082315_w_60-BL1-083_78.jpg', '082315_w_60-BL1-083_84.jpg', '082315_w_60-BL1-083_90.jpg', '082315_w_60-BL1-083_96.jpg', '082315_w_60-BL1-083_102.jpg', '082315_w_60-BL1-083_108.jpg', '082315_w_60-BL1-083_114.jpg', '082315_w_60-BL1-083_120.jpg', '082315_w_60-BL1-083_126.jpg', '082315_w_60-BL1-083_132.jpg']因为文件名list(由22张图片名的名称组成的列表)中又有字符又有数字,直接用(key=lambda x:str(x[20:-4]))的话排出来的顺序是不对的,搜索了很久也没有找到合适的方法,后面想尝试一下用int()进行一次强制类型转换,发现结果就对了!!开心!
哦对了,这里还有两个tips:
1. list.sort返回的是原本的队列,也就是直接在原本的队列上改变了顺序;而list.sorted返回的是一个新的对象,原来的队列还是原来的顺序。
2. 对队列使用索引的时候,比方说我这个文件名是 082315_w_60-BL1-083_6.jpg ,要想把最后这个6截取出来,要用[20:-4] 因为是从0开始数的,所以6从前数是第(0 1 2 3....)20个,从后往前数是第-5个,但是索引里的下限的那一位是不被包括的。。so...
唉 这种基础的问题啊...我都记不清...
本文介绍了一种在Python中对包含数字的图片文件名进行正确排序的方法,通过使用`int()`进行类型转换来确保数字部分按数值而非字符串顺序排列。
1545

被折叠的 条评论
为什么被折叠?



