为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2023-03-22 17:17:26
假设我正在使用 编写代码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.


查看完整回答
反对 回复 2023-03-22
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

行为上至少存在一个差异:

如果该目录不存在,iterdir()则引发一个FileNotFoundErrorglob('*')将这种情况视为一个空文件夹,返回一个空的可迭代对象。

>>> 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'


查看完整回答
反对 回复 2023-03-22
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信