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
.
假设我正在使用 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)
有哪一种选择更好吗?
glob
当您需要使用过滤功能并且过滤器简单且基于字符串时更好,因为它简化了工作。当然,手写简单匹配(通过 if path.endswith('.txt'):
而不是 glob('*.txt')
过滤 iterdir
)可能比基于正则表达式的模式匹配 glob
隐藏更有效,但通常不值得鉴于磁盘 I/O 慢了几个数量级,重新发明轮子的麻烦。
但是如果您根本不需要过滤功能,请不要使用它。 glob
在代码简单性或功能方面对您没有任何好处,并且会损害性能,因此只需使用 iterdir
.