pathlib 的 `glob` 方法的顺序在运行之间是否一致?

问题描述 投票:0回答:3

Path('.').glob('*.ext')
会产生一致的结果排序吗(假设正在通配的文件不会改变)?

似乎全局排序是基于文件系统顺序(至少对于旧的

glob
包)。通过将文件添加到目录(不会包含在 glob 中),是否会更改
pathlib
glob
顺序?即使没有向特定目录添加任何内容(例如,当系统上其他地方进行其他大型文件更改时),文件系统是否会更改此顺序?在几天的时间里?或者在所有这些情况下顺序会保持一致吗?

澄清一下,我无法简单地转换为列表并排序,因为有太多文件路径无法同时放入内存。我希望每次都能达到相同的顺序,因为我将进行一些 ML 训练,并且希望将每个第 n 个文件留作验证数据。此培训将需要几天的时间,这就是为什么我有兴趣知道订单在文件系统上是否长时间保持稳定。

python glob pathlib
3个回答
8
投票

查看

pathlib
模块的源代码,偶然发现latest commit直接指向了相关的地方:

os.scandir()
中使用
Path.glob()
作为上下文管理器。

因此,在幕后

Path.glob
使用
os.scandir
来获取目录条目。该函数的文档报告结果是无序的:

返回与路径给定的目录中的条目相对应的

os.DirEntry
对象的迭代器。 条目按任意顺序产生,不包括特殊条目
'.'
'..'

(强调我的)


3
投票

根据经验,glob 的任意顺序/文件系统顺序不会随时间变化,除非您手动更改文件。


0
投票

通过重复运行 Path.glob() 我可以看到排序在同一操作系统上是一致的,但是我在 Windows 上得到有序结果,在 Linux 上得到无序结果。

正如“a-guest”指出的那样,Path.glob() 在底层使用了 os.scandir(),这确实会产生依赖于操作系统的结果。

© www.soinside.com 2019 - 2024. All rights reserved.