今天用os.listdir()遍历文件夹下的图片发现,它的输出结果并不是按照某种特定顺序来的,这样输出就不是固定的。
os.listdir的结果就是一个list集,可以使用list的sort方法来排序。如果文件名中有数字,就用数字的排序。
import os
path=os.getcwd() #返回当前进程的工作目录
path_list=os.listdir(path)
path_list.sort() #对读取的路径进行排序
print(path_list)
输出:
[‘1.jpg’, ‘10.jpg’, ‘11.jpg’, ‘12.py’, ‘2.jpg’, ‘3.jpg’, ‘4.jpg’, ‘5.jpg’, ‘6.jpg’, ‘7.jpg’, ‘8.jpg’, ‘9.jpg’]
12.py是程序文件。
sort()采取了按字符键值排序的手段,所以10.jpg排在了前面。
修改代码如下:
import os
path=os.getcwd() #返回当前进程的工作目录
path_list=os.listdir(path)
path_list.sort(key=lambda x:int(x[:-4])) #将'.jpg'左边的字符转换成整数型进行排序
print(path_list)
输出:
[‘1.jpg’, ‘12.py’, ‘2.jpg’, ‘3.jpg’, ‘4.jpg’, ‘5.jpg’, ‘6.jpg’, ‘7.jpg’, ‘8.jpg’, ‘9.jpg’, ‘10.jpg’, ‘11.jpg’]
12.py是程序文件,int(x[:-4]),实际输出整数1。
针对不同的文件后缀可以使用另一种排序
import os
path=os.getcwd() #返回当前进程的工作目录
path_list=os.listdir(path)
path_list.sort(key=lambda x:int(x.split('.')[0])) #对‘.’进行切片,并取列表的第一个值(左边的文件名)转化整数型
print(path_list)
输出:
[‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘4.jpg’, ‘5.jpg’, ‘6.jpg’, ‘7.jpg’, ‘8.jpg’, ‘9.jpg’, ‘10.jpg’, ‘11.jpg’, ‘12.py’]
这样排序的文件就按照数字来排序。
参考
https://www.cnblogs.com/jins-note/p/9550388.html
https://blog.csdn.net/qq_41573001/article/details/108368942