pathlib glob('*') 和 iterdir 有什么区别?

What is the difference between pathlib glob('*') and iterdir?

假设我正在使用 pathlib 编写代码,并且我想遍历同一级别目录中的所有文件。

我可以通过两种方式做到这一点:

p = pathlib.Path('/some/path')
for f in p.iterdir():
    print(f)
p = pathlib.Path('/some/path')
for f in p.glob('*'):
    print(f)

有哪一种选择更好吗?

的扩展:为什么要将 API 用于针对过滤器模式的额外工作解析和测试,而您可以...不是?

glob 当您需要使用过滤功能并且过滤器简单且基于字符串时更好,因为它简化了工作。当然,手写简单匹配(通过 if path.endswith('.txt'): 而不是 glob('*.txt') 过滤 iterdir)可能比基于正则表达式的模式匹配 glob 隐藏更有效,但通常不值得鉴于磁盘 I/O 慢了几个数量级,重新发明轮子的麻烦。

但是如果您根本不需要过滤功能,请不要使用它。 glob 在代码简单性或功能方面对您没有任何好处,并且会损害性能,因此只需使用 iterdir.