我正在生成一个目录中的文件列表,我希望根据文件名中的数值对它们进行排序。
文件:
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操作系统上,如果我在Details视图中按列名进行排序,则按我希望的方式对其进行排序。这也可以用Python来完成吗?
谢谢。
发布于 2018-11-09 15:11:19
您可以使用内置的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']https://stackoverflow.com/questions/53228332
复制相似问题