【问题标题】:How to sort files by number in filename of a directory? [duplicate]如何按目录文件名中的数字对文件进行排序? [复制]
【发布时间】:2018-11-10 19:14:05
【问题描述】:

我有一个目录,其中包含许多按特定顺序命名的文本文件:

0.txt
1.txt
2.txt
....
100.txt
101.txt
.....
40000.txt

当我试图检索我正在使用的所有文件的排序列表时:

for file in sorted(os.listdir(filepath)):
            print(file)

我得到的结果是:

0.txt
1.txt
10.txt
100.txt
1000.txt
10000.txt
10001.txt
10002.txt
10003.txt
10004.txt
.....

这不是我想要的,我想要它按正常升序排列:

0.txt
1.txt
2.txt
3.txt
4.txt
...

有人知道怎么做吗?

【问题讨论】:

  • 如果您的字符串正是这种格式,您可以只用os.path.splitext 去掉.txt,然后去掉int() 的基本名称,这就是您的排序键。
  • natsort 执行您所需要的自然排序。

标签: python sorting operating-system


【解决方案1】:

您可以替换“.txt”,然后将值转换为int并排序。

例如:

for file in sorted(os.listdir(filepath), key=lambda x: int(x.replace(".txt", ""))):
    print(file)

【讨论】:

  • 谢谢!这工作得很好
【解决方案2】:

可以使用 lambda 表达式

import os

filelist = os.listdir(path)
filelist = sorted(filelist,key=lambda x: int(os.path.splitext(x)[0]))

for file in filelist:
    print(file)

输出为:

1.txt
2.txt
3.txt
4.txt
5.txt
6.txt
7.txt
8.txt
9.txt
10.txt

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多