我正在生成目录中的文件列表,并希望根据文件名中的数值对它们进行排序。
文件:
0.png
1.png
2.png
...
11.png
12.png
以此类推
如果我使用os.listdir()生成列表,然后在列表上调用.sort()方法,则如下所示:
['0.png', '1.png', '10.png', '11.png', '12.png', '13.png', '14.png', '15.png', '16.png', '17.png', '18.png', '19.png', '2.png', '20.png', '21.png', '22.png', '23.png', '24.png', '25.png', '26.png', '3.png', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png']
如何根据名称的数值对其进行排序?
在Windows操作系统上,如果我按“详细信息”视图中的列名排序,则在Windows资源管理器中,它将按我希望的方式排序。也可以用Python完成吗?
谢谢。
答案 0 :(得分:3)
您可以使用内置的sorted
函数并提供一个key
。
key
下方的函数可将文件名的第一部分(在'.'
之前)转换为整数。排序顺序使用这些函数调用的结果,但实际上是对原始对象进行排序。
l = ['0.png', '1.png', '10.png', '11.png', '12.png', '13.png', '14.png', '15.png', '16.png', '17.png', '18.png', '19.png', '2.png', '20.png', '21.png', '22.png', '23.png', '24.png', '25.png', '26.png', '3.png', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png']
sorted(l, key=lambda fname: int(fname.split('.')[0]))
返回
['0.png', '1.png', '2.png', ..., '26.png']