Python glob 模块全解析:轻松处理文件路径匹配
上课
在 Python 中,glob 模块 主要用于 查找符合特定规则的文件路径,它支持使用通配符(如 *、? 和 [])来进行灵活的文件搜索。相比于 os.listdir(),glob 更适合按模式匹配文件,非常适用于批量处理文件。
在这篇文章中,我们将详细讲解 glob 模块的用法,并提供多个示例,帮助你在实际开发中轻松使用它!
glob 模块的基础用法
glob.glob():获取匹配的文件路径列表
glob.glob(pattern, recursive=False) 用于查找所有符合 pattern 规则的文件,并返回一个文件路径列表。
pattern:搜索的文件模式,如"*.txt"代表所有.txt文件。recursive:是否递归搜索子目录(默认False,即只匹配当前目录)。
示例:匹配当前目录下的所有 .txt 文件
1 | import glob |
输出示例:
1 | ['test1.txt', 'notes.txt', 'data.txt'] |
glob.glob() 递归匹配子目录
如果想要在所有子目录中查找 .txt 文件,需要将 recursive=True 并使用 ** 通配符:
1 | files = glob.glob("**/*.txt", recursive=True) |
这个方法可以搜索当前目录及其所有子目录的 .txt 文件,非常适合查找多个层级的文件。
glob.iglob():高效的迭代器方式
glob.iglob(pattern, recursive=False) 与 glob.glob() 类似,但它不会一次性返回整个列表,而是返回一个迭代器,在需要时才生成文件名,节省内存。
示例:使用 iglob() 遍历匹配的文件
1 | for file in glob.iglob("*.txt"): |
如果你需要处理大量文件,建议使用 iglob(),避免占用过多内存。

通配符规则
| 通配符 | 含义 |
|---|---|
* |
匹配任意数量的字符(包括空字符) |
? |
匹配任意一个字符 |
[ ] |
匹配指定范围内的字符 |
示例:使用不同的通配符进行匹配
1 | print(glob.glob("*.py")) # 匹配当前目录下所有 .py 文件 |
pathlib vs glob
如果你使用的是 pathlib,也可以使用 Path.glob() 方法,它的功能与 glob.glob() 类似,但更符合面向对象的风格:
1 | from pathlib import Path |
对于递归匹配,可以使用 rglob() 方法:
1 | files = list(path.rglob("*.txt")) # 在所有子目录中查找 .txt 文件 |
glob 的实际应用案例
批量重命名文件
如果你有多个 .jpg 图片需要改名,可以结合 os.rename() 和 glob 进行批量处理:
1 | import glob |
统计某类型文件的数量
如果你需要统计 .log 日志文件的数量,可以这样做:
1 | log_files = glob.glob("logs/*.log") |
读取多个 CSV 文件并合并
如果你有多个 CSV 文件需要合并成一个 Pandas 数据框,可以使用 glob 进行匹配:
1 | import pandas as pd |
glob vs os.listdir()
| 方法 | 适用场景 | 是否支持通配符 | 是否支持递归 |
|---|---|---|---|
os.listdir() |
获取目录下所有文件 | ❌ | ❌ |
glob.glob() |
按模式匹配文件 | ✅ | ✅(使用 recursive=True) |
pathlib.Path.glob() |
现代方式的文件匹配 | ✅ | ✅(使用 rglob()) |
如果只想获取所有文件,os.listdir() 可能更简单;但如果需要按规则匹配,glob 更合适!
下课
🔹 glob 是一个强大的文件路径匹配工具,支持 *、? 等通配符,能快速找到符合条件的文件。
🔹 glob.glob() 适合一次性获取文件列表,glob.iglob() 则更节省内存。
🔹 pathlib 也提供了 glob() 和 rglob(),更加符合现代 Python 风格。
🔹 glob 在批量重命名、文件统计、数据处理等任务中非常有用!
希望这篇文章能帮你更好地理解和使用 glob!如果觉得有用,欢迎点赞、转发或关注公众号获取更多 Python 技巧!🚀🚀🚀
最新文章