1. glob 是什么? #

# 导入 glob 模块
import glob

# 查找当前目录下所有 .txt 文件
files = glob.glob("*.txt")
# 打印匹配结果列表,如 ['notes.txt', 'data.txt']
print(files)

2. 通配符规则 #

通配符 含义 示例
* 任意字符(单层) *.log
? 单个字符 data?.csv
[abc] a、b、c 之一 [Tt]est.py
** 递归匹配子目录 **/*.py

3. 基本用法:glob.glob() #

# 导入 glob 模块
import glob

# 匹配当前目录下所有 .py 文件
py_files = glob.glob("*.py")
print(py_files)

# 匹配 logs 子目录下的 .log 文件
logs = glob.glob("logs/*.log")
print(logs)

# 分别查找 .png 和 .jpg 后合并列表
images = glob.glob("*.png") + glob.glob("*.jpg")
print(images)

# 排序后逐一遍历 data 目录下的 .csv 文件
for path in sorted(glob.glob("data/*.csv")):
    print(path)

4. 递归匹配 #

# 导入 glob 模块
import glob

# 递归查找所有子目录中的 .py 文件
all_py = glob.glob("**/*.py", recursive=True)
print(all_py)

# 递归查找 project 目录下所有 .log 文件
all_logs = glob.glob("project/**/*.log", recursive=True)
print(all_logs)
# 导入 glob 模块
import glob

# iglob 返回迭代器,适合文件数量很多时逐条处理
for path in glob.iglob("**/*.py", recursive=True):
    print(path)
from pathlib import Path

# 使用 pathlib.Path.rglob() 递归匹配所有以 .py 结尾的文件
p = Path('.')
for pyfile in p.rglob('*.py'):
    print(pyfile)

5. 实用示例 #

5.1 批量读取文件 #

# 导入 glob 模块
import glob

# 排序后遍历 data 目录下所有 .json 文件
for path in sorted(glob.glob("data/*.json")):
    # 以 UTF-8 编码打开每个匹配文件
    with open(path, encoding="utf-8") as f:
        print(f"读取: {path}")
        # 处理文件内容...

5.2 批量删除临时文件 #

# 导入 glob 和 os 模块
import glob
import os

# 遍历 temp 目录下所有 .tmp 文件并删除
for path in glob.glob("temp/*.tmp"):
    os.remove(path)
    print(f"已删除: {path}")

5.3 统计项目中的 Python 文件 #

# 导入 glob 模块
import glob

# 递归收集所有 .py 文件路径
py_files = glob.glob("**/*.py", recursive=True)
# 打印文件总数
print(f"共 {len(py_files)} 个 .py 文件")
# 预览前 5 个文件路径
for path in py_files[:5]:
    print(f"  {path}")

6. 常见错误与注意事项 #

# 导入 glob 模块
import glob

# 错误:未传 recursive=True,结果通常为空或很少
files = glob.glob("**/*.py")

# 正确:开启递归匹配所有子目录中的 .py 文件
files = glob.glob("**/*.py", recursive=True)

7. 总结 #

7.1 速查 #

# 导入 glob 模块
import glob

# 当前目录下所有 .txt 文件
glob.glob("*.txt")
# src 目录下所有 .py 文件
glob.glob("src/*.py")
# 递归查找所有子目录中的 .py 文件
glob.glob("**/*.py", recursive=True)
# 迭代器版本,节省内存
glob.iglob("logs/*.log")

# 排序后遍历 data 目录下的 .csv 文件
sorted(glob.glob("data/*.csv"))

7.2 最佳实践 #