首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python ()排序\ POSIX readdir排序

Python ()排序\ POSIX readdir排序
EN

Stack Overflow用户
提问于 2016-12-21 08:15:12
回答 2查看 2.6K关注 0票数 3

我有一个关于在scandir函数中排序的基本问题。到目前为止,我阅读了POSIX readdir的手册页,没有找到关于订购保证的具体信息。

但是,当我在大型目录(不能更改,只能读取)上迭代时,我在多个系统(Fedora 24和Ubuntu 16.04)上观察到相同的结果。

这种行为的原因是什么?我能在哪里读到更多关于它的资料?

如果我需要的是订购,我是应该编写自己的POSIX 斯堪迪尔包装器,还是有人知道python的现有实现?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-21 08:45:41

readdir的手册页是显式的:

通过对readdir()的连续调用读取文件名的顺序取决于文件系统实现;名称不太可能以任何方式排序。

在大多数实现中,目录是顺序列表条目,readdirscandir都遵循底层顺序。如果您在不同的Linux版本上使用类似的文件系统,并且按相同的顺序填充目录,那么readdir可能也会给出相同的顺序。该顺序不是随机的,而且绝对是确定性的和可复制的,前提是您不添加、删除或重命名任何文件(至少在文件系统稳定之后,因为有些文件系统可以延迟一些操作)。简单地说,它不能从文件名中预测。

因此,如果你想要一个一致的秩序,你必须处理自己的订单。

票数 3
EN

Stack Overflow用户

发布于 2018-08-22 08:31:04

要回答问题的第二部分,下面是一个排序的实现:

代码语言:javascript
复制
for f in sorted(os.listdir('/usr/share')): print(f)

在这里使用listdir(),而不是scandir()来获得字符串的名称列表,这比scandir()返回的DirEntry对象更容易排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41258051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档