Python scandir() 排序\POSIX readdir 排序

标签 python linux posix

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

但是当我遍历大目录(无法更改,只读)时,我在多个系统(Fedora 24 和 Ubuntu 16.04)上观察到相同的结果。

这种行为的原因是什么?我在哪里可以阅读更多相关信息?

如果我需要连续排序,我是否应该围绕 POSIX 编写自己的包装器 scandir或者有人知道 python 的现有实现?

最佳答案

readdir 的手册页是明确的:

The order in which filenames are read by successive calls to readdir() depends on the filesystem implementation; it is unlikely that the names will be sorted in any fashion.

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

因此,如果您想要一致的顺序,则必须自己处理顺序。

关于Python scandir() 排序\POSIX readdir 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258051/

相关文章:

python - 在 python 中解码 HTTP 数据包内容,如 wireshark 中所见

python - 我想使用 opencv 删除边界

linux - 当底层文件大小发生变化时,映射区域仍然有效吗?

linux - 对第二列中所有相同字符串的第一列中的值求和

linux - 将 ssh key 添加到 ssh-agent 失败 w/running agent,设置环境变量

c++ - 如何将std::function类型分配给sigevent.sigev_notify_function(POSIX计时器)

mysql - 粉碎 MySQL 行

python - 绘制嵌套的 networkx 图

python - 变量值不更新

linux - 在 bash 中使用 bash 循环迭代日期——for (( ... )) 无法正常工作