假设我正在使用 编写代码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)有哪一种选择更好吗?
2 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
为什么要将 API 用于针对过滤器模式的额外工作解析和测试,而您可以……不是?
glob
当您需要使用过滤功能并且过滤器简单且基于字符串时更好,因为它简化了工作。当然,手写简单匹配(iterdir
通过if path.endswith('.txt'):
而不是 过滤glob('*.txt')
)可能比基于正则表达式的模式匹配glob
隐藏更有效,但考虑到磁盘 I/O 慢几个数量级,重新发明轮子通常不值得。
但是,如果您根本不需要过滤功能,请不要使用它。glob
在代码简单性或功能方面对您没有任何好处,并且会损害性能,因此只需使用iterdir
.
元芳怎么了
TA贡献1798条经验 获得超7个赞
行为上至少存在一个差异:
如果该目录不存在,iterdir()
则引发一个FileNotFoundError
. glob('*')
将这种情况视为一个空文件夹,返回一个空的可迭代对象。
>>> import pathlib
>>> path = pathlib.Path('/some/path')
>>> list(path.glob('*'))
[]
>>> list(path.iterdir())
Traceback (most recent call last):
[...]
FileNotFoundError: [Errno 2] No such file or directory: '/some/path'
添加回答
举报
0/150
提交
取消