假设我正在编写代码pathlib,并且我想迭代目录同一级别中的所有文件。
我可以通过两种方式做到这一点:
p = pathlib.Path('/some/path')
for f in p.iterdir():
    print(f)
Run Code Online (Sandbox Code Playgroud)
p = pathlib.Path('/some/path')
for f in p.glob('*'):
    print(f)
Run Code Online (Sandbox Code Playgroud)
其中一种选择是否更好?
Sha*_*ger 23
我的评论的扩展:为什么要让 API 进行额外的工作解析并针对过滤器模式进行测试,而您可以......不?
glob当您需要使用过滤功能并且过滤器很简单并且基于字符串时,它会更好,因为它简化了工作。当然,手写简单匹配(iterdir通过if path.endswith('.txt'):而不是  进行过滤glob('*.txt'))可能比基于正则表达式的模式匹配glob隐藏更有效,但考虑到磁盘 I/O 速度要慢几个数量级,通常不值得重新发明轮子。
但如果您根本不需要过滤功能,请不要使用它。glob在代码简单性或功能方面没有任何好处,并且会损害性能,所以只需使用iterdir.
flo*_*ake 14
除了现有的优秀答案之外,行为上至少还有一个区别:
如果该目录不存在,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'
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           17532 次  |  
        
|   最近记录:  |