对list中的文件名进行排序

本文介绍了一种在Python中对包含数字的图片文件名进行正确排序的方法,通过使用`int()`进行类型转换来确保数字部分按数值而非字符串顺序排列。
  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...

唉 这种基础的问题啊...我都记不清...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值