Python学习记录-2(glob.glob用法详解)
Python 标准库 glob 的 glob.glob() 用来按“Unix shell 风格”的路径通配符查找文件/目录,返回所有匹配路径的 列表(不是生成器)。
核心要点只有三件事:通配符语法、常见参数、配合 glob/iglob 使用。
1. 通配符语法
| 通配符 | 含义 | 示例 |
|---|---|---|
* |
任意长度(≥0)字符,不含目录分隔符 / |
*.py 匹配当前目录下所有 .py 文件 |
? |
单个字符 | file?.txt → file1.txt, fileA.txt |
[] |
字符集或范围 | [0-9].log → 0.log, 9.log |
** |
递归匹配任意层子目录(需 recursive=True) |
src/**/*.py 匹配 src/ 及其所有子目录下的 .py 文件 |
2. 函数签名
glob.glob(pathname, *, recursive=False, include_hidden=False)
- pathname:带通配符的路径字符串(可用原始字符串
r'...'避免转义问题)。 - recursive:为
True时**才能递归子目录;默认False。 - include_hidden(3.11+):是否包含以
.开头的隐藏文件/目录。 - 返回值:按字母排序后的 绝对/相对路径列表(空列表表示无匹配)。
3. 常见用法示例
3.1 基础通配
import glob, os
# 当前目录下所有 .txt
txt_files = glob.glob('*.txt')
# 任意一级目录下的 png
pngs = glob.glob('images/*.png')
# 绝对路径写法
logs = glob.glob('/var/log/*.log')
3.2 递归搜索(** + recursive=True)
# 整个项目树中所有 Python 文件
py_files = glob.glob('src/**/*.py', recursive=True)
3.3 多段通配 & 字符集
# 匹配 data/2024-07-30.csv、data/2024-07-31.csv ...
today_csv = glob.glob('data/2024-[0-9][0-9]-[0-9][0-9].csv')
3.4 与 os.path / pathlib 配合
from pathlib import Path
for p in map(Path, glob.glob('**/*.py', recursive=True)):
print(p.name, p.stat().st_size, 'bytes')
3.5 惰性迭代(节省内存)
from glob import iglob # 返回迭代器
for path in iglob('bigdata/**/*.csv', recursive=True):
process(path) # 逐条处理,不会一次性全部读入内存
4. 易踩坑提示
**必须配合recursive=True才能递归;否则被当成普通*。- Windows 路径分隔符既可写
\也可写/,推荐统一用/或原始字符串。 - 结果已按文件名字母排序,如需按修改时间排,需再
sorted(..., key=os.path.getmtime)。 - 隐藏文件(以
.开头)默认被忽略,除非include_hidden=True(3.11+)。
浙公网安备 33010602011771号