【问题标题】:Is the ordering of pathlib's `glob` method consistent between runs?pathlib 的 `glob` 方法的顺序在运行之间是否一致?
【发布时间】:2020-04-02 19:04:05
【问题描述】:

Path('.').glob('*.ext') 是否会产生一致的结果顺序(假设被通配的文件不会改变)?

It seems the glob ordering is based on the file system order(至少,对于旧的glob 包)。 pathlib's glob 的顺序是否会通过向目录中添加文件来更改(不会包含在 glob 中)?即使没有将任何内容添加到特定目录(例如,当系统上的其他地方进行其他大文件更改时),文件系统是否会更改此顺序?在几天的过程中?或者在所有这些情况下顺序会保持一致吗?

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

【问题讨论】:

标签: python glob pathlib


【解决方案1】:

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

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

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

返回os.DirEntry 对象的迭代器,该对象对应于 path 给定的目录中的条目。 条目按任意顺序生成,不包括特殊条目'.''..'

(强调我的)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多