【问题标题】:Sort files according to Numerical value of filename in Python [duplicate]根据Python中文件名的数值对文件进行排序[重复]
【发布时间】:2018-11-09 15:09:59
【问题描述】:

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

文件:

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

谢谢。

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以使用内置的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']
    

    【讨论】:

    • 这真的很酷!谢谢。
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2020-03-25
    • 2016-04-08
    • 2021-08-20
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多