一、glob 模块简介
glob
是 python 的标准库之一,无需额外安装,专门用于文件名的模式匹配搜索。它的名字来源于 unix shell 命令中的“globbing”,意思是使用通配符进行匹配。
常见应用场景包括:
- 批量读取某个目录下的图片、文本、日志等文件
- 在子目录中递归查找特定类型的文件
- 配合
os
或shutil
实现批量文件复制、删除、重命名等操作
二、通配符模式基础
glob
使用与 shell 类似的通配符规则:
通配符 | 含义 | 示例 |
---|---|---|
* | 匹配任意长度的任意字符 | *.txt 匹配所有 .txt |
? | 匹配任意一个字符 | file?.txt 匹配 file1.txt , filea.txt |
[] | 匹配指定范围内的任一字符 | file[1-3].txt 匹配 file1.txt , file2.txt , file3.txt |
** | 匹配任意目录(需开启递归) | **/*.py 匹配任意子目录中的 .py 文件(需设置 recursive=true ) |
三、基本用法
3.1 查找当前目录下的所有 .txt 文件
import glob files = glob.glob("*.txt") print(files) # 输出示例: ['data1.txt', 'report.txt']
3.2 匹配指定路径中的图像文件
image_files = glob.glob("images/*.jpg")
3.3 匹配多个后缀名(结合列表推导)
files = glob.glob("data/*.csv") + glob.glob("data/*.xlsx")
四、递归查找子目录文件(**)
从 python 3.5 开始,glob
支持递归模式:
files = glob.glob("**/*.py", recursive=true)
这会在当前目录及其所有子目录中查找 .py
文件。
默认情况下 ** 不递归,必须显式设置 recursive=true。
五、与 os.path、pathlib 联合使用
5.1 获取文件名或绝对路径
import os for file in glob.glob("logs/*.log"): print("文件名:", os.path.basename(file)) print("绝对路径:", os.path.abspath(file))
5.2 使用 pathlib 更优雅地处理路径
from pathlib import path files = path("data").glob("*.txt") for file in files: print(file.name, file.stem, file.suffix)
六、高级使用技巧
6.1 查找以数字开头的文件
glob.glob("[0-9]*.txt")
6.2 多级目录下查找 .png 图像
glob.glob("*/**/*.png", recursive=true)
6.3 排除某些文件(结合 fnmatch 或过滤器)
import fnmatch files = [f for f in glob.glob("data/*.csv") if not fnmatch.fnmatch(f, "data/test_*.csv")]
七、实战案例:批量读取图片并处理
import glob from pil import image image_paths = glob.glob("images/**/*.jpg", recursive=true) for path in image_paths: img = image.open(path) print(f"{path}: {img.size}")
八、glob vs os.listdir vs pathlib
特性 | glob | os.listdir | pathlib |
---|---|---|---|
通配符匹配 | 支持 | 不支持,需要手动过滤 | 支持 .glob() |
递归搜索 | 支持 (**) | 需手动递归遍历 | rglob() 更简洁 |
返回类型 | str 列表 | str 列表 | path 对象生成器 |
使用习惯 | 类 unix shell 风格 | 简单、通用 | 面向对象、现代化 |
建议在新项目中逐渐迁移至 pathlib
,但 glob
的通配能力仍不可替代。
九、常见问题与误区
9.1 glob 不返回文件?
- 检查路径是否正确(相对/绝对路径)
- 注意区分大小写(特别是 linux)
**/*.py
要配合recursive=true
9.2 无法匹配隐藏文件?
glob("*")
默认不会匹配以 .
开头的文件,需要明确指定:
glob.glob(".*") # 匹配隐藏文件
十、总结与最佳实践
glob
是处理文件路径批量操作的利器- 支持通配符、递归、灵活组合
- 可与
os
、pathlib
、pil
、shutil
等库组合处理复杂任务 - 对于大规模目录扫描,推荐使用
pathlib.rglob()
更高效
以上就是python使用glob库批量匹配文件路径的详细内容,更多关于python glob匹配文件路径的资料请关注代码网其它相关文章!
发表评论