根据Python中文件名的数值对文件排序

时间:2018-11-09 15:09:59

标签: python

我正在生成目录中的文件列表,并希望根据文件名中的数值对它们进行排序。

文件:

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完成吗?

谢谢。

1 个答案:

答案 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']