glob (PTH207)
派生自 flake8-use-pathlib linter。
作用
检查 glob.glob() 和 glob.iglob() 的使用。
为什么这不好?
与 os 和 glob 提供的较低级 API 相比,pathlib 为路径操作提供了一个高级 API。
如果可能,使用 Path 对象方法(例如 Path.glob())可以提高可读性,优于其低级对应方法(例如 glob.glob())。
请注意,glob.glob() 和 Path.glob() 并非完全等效
glob 模块函数 |
Path.glob() |
|
|---|---|---|
| 隐藏文件 | 默认情况下会排除隐藏文件。 在 Python 3.11+ 上,可以使用 include_hidden 关键字来包含隐藏目录。 |
默认情况下包含隐藏文件。 |
| 急切性 | glob.iglob() 返回一个惰性迭代器。 在底层,glob.glob() 只是将迭代器转换为列表。 |
Path.glob() 返回一个惰性迭代器。 |
| 工作目录 | glob.glob() 和 glob.iglob() 接受 root_dir 关键字来设置当前工作目录。 |
Path.rglob() 可用于返回相对路径。 |
Globstar (**) |
必须将 recursive 标志设置为 True,** 模式才能匹配任何文件以及零个或多个目录、子目录和符号链接。 |
Path.glob() 中的 ** 模式表示“此目录和所有子目录,递归地”。 换句话说,它启用了递归 globbing。 |
示例
建议改为
已知问题
虽然使用 pathlib 可以提高代码的可读性和类型安全性,但与直接使用字符串的较低级替代方案相比,它的性能可能会降低,尤其是在旧版本的 Python 上。