os.listdir()的非字母数字列表排序
我经常用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
我觉得文件的顺序跟你电脑上文件系统的索引方式有关。如果你真的想让文件按照某种顺序排列,可以在获取文件后对列表进行排序。