在 Python 中,glob
模块 主要用于 查找符合特定规则的文件路径,它支持使用通配符(如 *
、?
和 []
)来进行灵活的文件搜索。相比于 os.listdir()
,glob
更适合按模式匹配文件,非常适用于批量处理文件。
在这篇文章中,我们将详细讲解 glob
模块的用法,并提供多个示例,帮助你在实际开发中轻松使用它!
glob
模块的基础用法glob.glob()
:获取匹配的文件路径列表glob.glob(pattern, recursive=False)
用于查找所有符合 pattern
规则的文件,并返回一个文件路径列表。
pattern
:搜索的文件模式,如 "*.txt"
代表所有 .txt
文件。recursive
:是否递归搜索子目录(默认 False
,即只匹配当前目录)。.txt
文件import glob
files = glob.glob("*.txt") # 匹配当前目录下所有 .txt 文件
print(files)
输出示例:
['test1.txt', 'notes.txt', 'data.txt']
glob.glob()
递归匹配子目录如果想要在所有子目录中查找 .txt
文件,需要将 recursive=True
并使用 **
通配符:
files = glob.glob("**/*.txt", recursive=True)
print(files)
这个方法可以搜索当前目录及其所有子目录的 .txt
文件,非常适合查找多个层级的文件。
glob.iglob()
:高效的迭代器方式glob.iglob(pattern, recursive=False)
与 glob.glob()
类似,但它不会一次性返回整个列表,而是返回一个迭代器,在需要时才生成文件名,节省内存。
iglob()
遍历匹配的文件for file in glob.iglob("*.txt"):
print(file)
如果你需要处理大量文件,建议使用 iglob()
,避免占用过多内存。
通配符 | 含义 |
---|---|
* | 匹配任意数量的字符(包括空字符) |
? | 匹配任意一个字符 |
[ ] | 匹配指定范围内的字符 |
print(glob.glob("*.py")) # 匹配当前目录下所有 .py 文件
print(glob.glob("data?.csv")) # 匹配 data1.csv、data2.csv,但不匹配 data10.csv
print(glob.glob("[a-c]*.txt")) # 匹配以 a、b 或 c 开头的 .txt 文件
pathlib
vs glob
如果你使用的是 pathlib
,也可以使用 Path.glob()
方法,它的功能与 glob.glob()
类似,但更符合面向对象的风格:
from pathlib import Path
path = Path(".")
files = list(path.glob("*.txt")) # 获取所有 .txt 文件
print(files)
对于递归匹配,可以使用 rglob()
方法:
files = list(path.rglob("*.txt")) # 在所有子目录中查找 .txt 文件
print(files)
glob
的实际应用案例如果你有多个 .jpg
图片需要改名,可以结合 os.rename()
和 glob
进行批量处理:
import glob
import os
for idx, file in enumerate(glob.glob("images/*.jpg")):
new_name = f"images/image_{idx}.jpg"
os.rename(file, new_name)
print(f"重命名 {file} -> {new_name}")
如果你需要统计 .log
日志文件的数量,可以这样做:
log_files = glob.glob("logs/*.log")
print(f"日志文件数量:{len(log_files)}")
如果你有多个 CSV 文件需要合并成一个 Pandas 数据框,可以使用 glob
进行匹配:
import pandas as pd
csv_files = glob.glob("data/*.csv")
df_list = [pd.read_csv(file) for file in csv_files] # 读取所有 CSV
df = pd.concat(df_list, ignore_index=True) # 合并
print(df.head())
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
在批量重命名、文件统计、数据处理等任务中非常有用!