跳到内容

glob (PTH207)

派生自 flake8-use-pathlib linter。

作用

检查 glob.glob()glob.iglob() 的使用。

为什么这不好?

osglob 提供的较低级 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。

示例

import glob
import os

glob.glob(os.path.join("my_path", "requirements*.txt"))

建议改为

from pathlib import Path

Path("my_path").glob("requirements*.txt")

已知问题

虽然使用 pathlib 可以提高代码的可读性和类型安全性,但与直接使用字符串的较低级替代方案相比,它的性能可能会降低,尤其是在旧版本的 Python 上。

参考