Python 中,内置的 glob 模块主要用来按照指定规则匹配文件/目录路径,然后完成文件路径查找,就像 Windows 系统的文件搜索功能,glob 还支持通配符快速筛选文件,非常适合批量处理文件。
| 通配符 | 作用 |
| * | 匹配 0 个或多个 任意字符(最常用) |
| ? | 匹配 1 个 任意字符 |
| [ ] | 匹配括号内的 任意一个字符(如 [0-9] [a-z]) |
| ** | 匹配 所有层级目录(递归查找,配合 recursive=True 使用) |
用于查找符合规则的文件/目录,返回路径列表。如果 recursive=True,则允许使用递归遍历所有子目录。
也是用于查找符合规则的文件或目录,但是返回迭代器,通过遍历迭代器遍历所有匹配的文件,而不是一次性将所有符合条件的路径全部返回,这样更节省内存,适合海量文件查找。
在编写示例前,我们先创建测试目录结构,方便测试,目录结构如下:

其中,demo.py 存放示例代码。
使用星号(*)匹配任意字符,例如:
import glob
# 查找当前目录下所有 .txt 文件
txt_files = glob.glob("./*.txt")
print("所有 txt 文件:", txt_files)
# 查找所有文件(不限制后缀)
all_files = glob.glob("./*")
print("当前目录下所有内容:", all_files)运行结果:
所有 txt 文件: ['.\\test.txt']
test_files 下所有内容: ['.\\demo.py', '.\\subpkg', '.\\test.png', '.\\test.txt', '.\\test.xls', '.\\test.zip']使用问号(?)符号匹配单个字符,示例:
import glob
# 查找文件名是 "tes + 1个字符.txt" 的文件(如 test.txt、tesb.txt)
single_files = glob.glob("./tes?.txt")
print("文件列表:", single_files)运行结果:
文件列表: ['.\\test.txt']使用中括号([ ])配配范围字符,如 [123] 匹配包含 1 或 2 或 3 的字符,例如:
import glob
# 查找文件名以tes开头,中间是小写字母的 txt 文件
# 如:tesa.txt、tesb.txt 等
num_files = glob.glob("./tes[a-z].txt")
print("文件列表:", num_files)运行结果:
文件列表: ['.\\test.txt']设置 recursive 选项为 True,开启递归查找所有子目录。例如:
import glob
# 递归查找当前目录及其所有子目录下的 .txt 文件
all_txt = glob.glob("./**/*.txt", recursive=True)
print("所有的 txt 文件:", all_txt)运行结果:
所有的 txt 文件: ['.\\test.txt', '.\\subpkg\\sub_test.txt', '.\\subpkg\\subsubpkg\\sub_sub_test.txt']注意,lob.glob 要 recursive=True 生效,必须满足路径里使用 ** 符号,** 表示匹配所有子目录、递归。
如果文件数量巨大时,用 iglob 比 glob 更高效,更节约内存。例如:
import glob
# 递归查找当前目录及其所有子目录下的 .txt 文件
# 不一次性加载全部路径,而是逐个加载
for file in glob.iglob("./**/*.txt", recursive=True):
print("找到文件:", file)运行结果:
找到文件: .\test.txt
找到文件: .\subpkg\sub_test.txt
找到文件: .\subpkg\subsubpkg\sub_sub_test.txt通过 glob.os.path.abspath() 函数将指定路径转换为绝对路径,当然还可以使用os.path.abspath(path) 或 Path(path).absolute() 进行实现。代码:
import glob
# 查找当前目录下所有以 .txt 结尾的文件,并返回相对路径
abs_files = glob.glob("./**/*.txt", recursive=True)
# 将相对路径转换为绝对路径
abs_files = [glob.os.path.abspath(f) for f in abs_files]
for file in abs_files:
print(file)运行结果:
d:\$share_dir\workspace\5.demo\python_demo\test.txt
d:\$share_dir\workspace\5.demo\python_demo\subpkg\sub_test.txt
d:\$share_dir\workspace\5.demo\python_demo\subpkg\subsubpkg\sub_sub_test.txt结合 glob 和 shutil 模块,实现一个自动化文件分类工具,主要功能如下:
递归查找指定目录下所有文件
按文件后缀分类(txt、jpg、png、csv、其他)
自动创建分类文件夹
移动文件到对应目录
示例代码:
import glob
import os
import shutil
def classify_files(source_dir):
"""
自动分类文件:按后缀名归类
:param source_dir: 要分类的源目录
"""
# 1. 递归查找所有文件(排除目录)
all_files = glob.glob(os.path.join(source_dir, "**/*"), recursive=True)
for file_path in all_files:
# 跳过目录,只处理文件
if os.path.isdir(file_path):
continue
# 2. 获取文件后缀名
file_ext = os.path.splitext(file_path)[1].lower() # 如 .txt .jpg
file_ext = file_ext[1:] if file_ext else "others" # 去掉点,无后缀归为 others
# 3. 创建分类目录
target_dir = os.path.join(source_dir, file_ext + "_files")
os.makedirs(target_dir, exist_ok=True)
# 4. 移动文件到目标目录
try:
shutil.move(file_path, os.path.join(target_dir, os.path.basename(file_path)))
print(f"✅ 已移动:{file_path} → {target_dir}")
except Exception as e:
print(f"❌ 移动失败:{file_path},原因:{e}")
print("\n🎉 文件分类完成!")
# 测试:自动分类 test_files 目录下所有文件
classify_files("test_files")假如 test_files 的目录结构如下图:
执行上述代码后,test_files 目录会自动变成下图:

更多关于 glob 模块的信息请参考 https://docs.python.org/3/library/glob.html 官网文档。