pathlib 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)

有哪一种选择更好吗?


幕布斯6054654
浏览 171回答 2
2回答

茅侃侃

为什么要将 API 用于针对过滤器模式的额外工作解析和测试,而您可以……不是?glob当您需要使用过滤功能并且过滤器简单且基于字符串时更好,因为它简化了工作。当然,手写简单匹配(iterdir通过if path.endswith('.txt'):而不是 过滤glob('*.txt'))可能比基于正则表达式的模式匹配glob隐藏更有效,但考虑到磁盘 I/O 慢几个数量级,重新发明轮子通常不值得。但是,如果您根本不需要过滤功能,请不要使用它。glob在代码简单性或功能方面对您没有任何好处,并且会损害性能,因此只需使用iterdir.

元芳怎么了

行为上至少存在一个差异:如果该目录不存在,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'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python