📖 前言
- 个人博客:https://www.power-blog.cn
- CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
glob是python中的内置模块,该模块主要是用来查找文件与目录的。glob模块是按照 Unix shell 所使用的规则找出所有匹配特定模式的路径名称。我们只需要了解该模块的匹配规则与常用函数,就会使文件查找,路径匹配变得非常快捷简单。
💡 正文
1 glob模块介绍
1.1 通配符
*
:匹配0个或多个字符;**
:匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增);?
:代匹配一个字符;[]
:匹配指定范围内的字符,如[0-9]匹配数字,[a-z]匹配小写字母;
1.2 方法
glob.glob()
:返回符合匹配条件的所有文件的路径;glob.iglob()
:返回一个迭代器对象,需要循环遍历获取每个元素,得到的也是符合匹配条件的所有文件的路径;glob.escape()
:escape可以忽略所有的特殊字符,就是星号、问号、中括号;
备注:recursive=False
:代表递归调用,与特殊通配符“**”
一同使用,默认为False,False表示不递归调用,True表示递归调用;
1.3 测试文件准备
D:\picture
D:\picture\L1
D:\picture\L1\L2
三层目录,每个文件夹中都有4个文件,其中3个.jpg
,1个.png
2 glob函数的使用
2.1 glob()函数
该方法返回一个list
import glob
path = r'D:\picture\*.jpg'
files = glob.glob(path)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
2.2 iglob()函数
使用该函数,可以生产一个迭代器
path = r'D:\picture\*.jpg'
files = glob.iglob(path)
for file in files:
print(file)
# D:\picture\img1.jpg
# D:\picture\img2.jpg
# D:\picture\img3.jpg
3 通配符是使用
3.1 找出后缀为.jpg
的文件
D:\picture\*.jpg
:匹配当前目录下文件后缀名为jpg的文件
import glob
path = r'D:\picture\*.jpg'
files = glob.glob(path)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
3.2 匹配文件名包含m的文件
D:\picture\*m*
:匹配出当前目录下文件名及后缀名都含有m的文件
path = r'D:\picture\*m*'
files = glob.glob(path)
print(files)
# ['D:\\picture\\a.md', 'D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\img4.png', 'D:\\picture\\maven.txt']
3.3 匹配以img开头的文件
D:\picture\img?.jpg
:匹配出当前目录下以img开头的文件(?只能匹配一个字符)
path = r'D:\picture\img?.jpg'
files = glob.glob(path)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
D:\picture\img*.jpg
:匹配出当前目录下以img开头的文件(*可以匹配一个活多个字符)
path = r'D:\picture\img*.jpg'
files = glob.glob(path)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
3.4 匹配当前目录文件名包含数字的文件
D:\picture\*[0-9]*.*
:匹配当前目录下所有文件名包含数字的所有文件
path = r'D:\picture\*[0-9]*.*'
files = glob.glob(path)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\img4.png']
备注:
- 如果规则写成
*[0-9]*
,则同时会匹配到满足要求的目录 - 如果规则写成
*[!5-9]*
,则满足5-9的不会匹配,会把0-4的匹配出来
3.5 匹配当前目录下后缀为jpg的文件,包括子目录
D:\picture\**\*.jpg
:匹配后缀为jpg的文件,包括子目录中的同样进行匹配
path = r'D:\picture\**\*.jpg'
files = glob.glob(path, recursive=True)
print(files)
# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\L1\\img1.jpg', 'D:\\picture\\L1\\img2.jpg', 'D:\\picture\\L1\\img3.jpg', 'D:\\picture\\L1\\L2\\img1.jpg', 'D:\\picture\\L1\\L2\\img2.jpg', 'D:\\picture\\L1\\L2\\img3.jpg']
备注:recursive=True
,参数必填,若不为True,则只会获取每层目录第一个文件,匹配不到所有文件