os.listdir()的非字母数字列表排序

209 投票
14 回答
275170 浏览
提问于 2025-04-16 10:42

我经常用Python来处理一堆数据文件夹。最近,我发现生成的列表的默认顺序变得有点奇怪,几乎让人看不懂。比如说,如果我在一个当前目录下,里面有这些子文件夹:run01、run02……run19、run20,然后我用下面的命令生成一个列表:

dir = os.listdir(os.getcwd())

那么我通常得到的列表顺序是这样的:

dir = ['run01', 'run18', 'run14', 'run13', 'run12', 'run11', 'run08', ... ]

依此类推。以前这个顺序是按字母和数字的顺序排列的,但现在这个新顺序已经持续了一段时间了。

那么,是什么决定了这些列表的(显示)顺序呢?

14 个回答

64

根据文档的说明:

os.listdir(path)

这个函数会返回一个列表,里面包含了指定路径下所有文件和文件夹的名字。这个列表的顺序是随机的。即使目录里有特殊的条目 '.' 和 '..',它们也不会被包含在内。

所以,返回的顺序是不可靠的,它只是文件系统的一种表现。

如果你想要对结果进行排序,可以使用 sorted(os.listdir(path))

248

你可以使用内置的 sorted 函数来按照你想要的方式对字符串进行排序。根据你描述的情况,

sorted(os.listdir(whatever_directory))

另外,你也可以使用列表的 .sort 方法:

lst = os.listdir(whatever_directory)
lst.sort()

我觉得这样应该可以解决问题。

需要注意的是,os.listdir 获取文件名的顺序可能完全取决于你的文件系统。

91

我觉得文件的顺序跟你电脑上文件系统的索引方式有关。如果你真的想让文件按照某种顺序排列,可以在获取文件后对列表进行排序。

撰写回答