Python glob模块详解:通配符匹配与文件搜索实战
本文详细介绍Python中glob模块的使用方法,涵盖glob()与iglob()函数的参数、返回值及递归选项。重点解析*、?、[]等通配符的匹配规则,结合Windows与Linux路径示例,演示如何高效查找符合特定规则的文件与目录,适用于自动化脚本与文件管理场景。
通配符是一类特殊符号,主要包括星号(*)和问号(?),常用于模糊搜索文件。其中,“*”能够匹配任意数量的字符,而“?”仅匹配单个字符。
在查找文件夹时,通配符可替代一个或多个真实字符;当无法确定具体字符名,或需要匹配满足特定条件的多个目标文件时,使用通配符替代真实字符是高效的选择。
英文“globbing”意为统配,Python在glob模块中定义了glob()函数,用于实现目录内容的匹配功能。glob.glob()函数接收通配模式作为输入,并返回所有匹配的文件名和路径名列表,其功能与os.listdir类似。
glob模块中常用的函数包括glob()和iglob()。
glob(pathname, recursive=False)
第一个参数pathname为需要匹配的字符串路径。建议在该参数前加上r前缀,以原始字符串形式传递,从而避免转义字符引发的错误。
第二个参数recursive代表是否启用递归调用,通常与特殊通配符“**”配合使用,默认值为False。
该函数返回一个包含符合条件路径的字符串列表。若运行环境为Windows系统,路径中的反斜杠“\”会自动转换为双反斜杠“\\”以进行转义。
iglob(pathname, recursive=False)
iglob函数的参数与glob()保持一致。
iglob返回一个迭代器,它不会一次性将所有匹配到的路径保存在内存中,而是逐个获取匹配的文件路径名。遍历该迭代器的结果与使用相同参数调用glob()返回的列表内容一致。
glob模块支持多种通配符,具体功能如下表所示。
| 通配符 | 功能 |
|---|---|
| * | 匹配0或多个字符 |
| ** | 匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增) |
| ? | 匹配1个字符,与正则表达式里的?不同 |
| [exp] | 匹配指定范围内的字符,如:[1-9]匹配1至9范围内的字符 |
| [!exp] | 匹配不在指定范围内的字符 |
以下是glob.glob函数的具体使用示例。
import glob
listglob = []
listglob = glob.glob(r"/home/xxx/picture/*.png")
listglob.sort()
print listglob
print '--------------------'
listglob = glob.glob(r"/home/xxx/picture/0?.png")
listglob.sort()
print listglob
print '--------------------'
listglob = glob.glob(r"/home/xxx/picture/0[0,1,2].png")
listglob.sort()
print listglob
print '--------------------'
listglob = glob.glob(r"/home/xxx/picture/0[0-3].png")
listglob.sort()
print listglob
print '--------------------'
listglob = glob.iglob(r"/home/xxx/picture/0[a-z].png")
print listglob
for item in listglob:
print item
补充说明:Python glob() 函数快速入门。
Python glob模块基础。
glob模块是Python中最简单的模块之一,内容精简。它主要用于查找符合特定规则的文件路径名。
其用法类似于Windows下的文件搜索功能,主要用到三个匹配符:'*'、'?'和'[ ]'。其中,“*”匹配任意0个或多个字符;“?”匹配任意单个字符;“[ ]”匹配指定范围内的字符,例如:[0-9]用于匹配数字。
glob匹配不区分大小写。
默认情况下,以'.'开头的隐藏文件不匹配。
查看上一级目录内容。
执行以下代码可查看上一级所有目录:
>>> print(glob.glob("../*"))
['..\\Python37-32', '..\\Python38-32']
查看本级目录内容。
执行以下代码可查看本级所有目录:
>>> print(glob.glob("./*"))
['.\\DLLs', '.\\Doc', '.\\include', '.\\Lib', '.\\libs', '.\\LICENSE.txt', '.\\NEWS.txt', '.\\python.exe', '.\\python3.dll', '.\\python38.dll', '.\\pythonw.exe', '.\\Scripts', '.\\tcl', '.\\Tools', '.\\vcruntime140.dll']
查看本级所有文件。
执行以下代码可查看本级所有文件:
print(glob.glob("./*.*"))
['.\\LICENSE.txt', '.\\NEWS.txt', '.\\python.exe', '.\\python3.dll', '.\\python38.dll', '.\\pythonw.exe', '.\\vcruntime140.dll']
查看本级所有dll文件。
执行以下代码可查看本级所有dll文件:
>>> print(glob.glob("./*.dll"))
['.\\python3.dll', '.\\python38.dll', '.\\vcruntime140.dll']
查看C盘所有目录。
执行以下代码可查看C盘所有目录:
>>> print(glob.glob("C:/*"))
['C:/$360Section', 'C:/$Recycle.Bin', 'C:/360SANDBOX', 'C:/Boot', 'C:/bootmgr'.......]
查看C盘包含特定组合的目录。
执行以下代码可查看C盘所有包含pr、po、br或bo组合的目录:
print(glob.glob("C:/*[PB][RO]*"))
['C:/360SANDBOX', 'C:/Boot', 'C:/bootmgr', 'C:/BOOTNXT', 'C:/BOOTSECT.BAK', 'C:/PO', 'C:/Program Files', 'C:/Program Files (x86)', 'C:/ProgramData']
查看C盘包含P_o模式的目录。
执行以下代码可查看C盘所有包含P_o(中间任意单字符)的目录:
>>> print(glob.glob("C:/*P?O*"))
['C:/Program Files', 'C:/Program Files (x86)', 'C:/ProgramData']
查看C盘两级目录下的txt文件。
执行以下代码可查看C盘两级目录下所有的txt文件:
>>> print(glob.glob("C:/*/*.txt"))
['C:/xiaoyi\\检索式.txt']
以上为个人经验总结,希望能为大家提供参考。也希望大家多多支持本站。如有错误或未考虑周全之处,欢迎指正。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









