glob是python中的内置模块,该模块主要是用来查找文件与目录的。glob模块是按照 Unix shell 所使用的规则找出所有匹配特定模式的路径名称。我们只需要了解该模块的匹配规则与常用函数,就会使文件查找,路径匹配变得非常快捷简单。
1.匹配规则---四个常用通配符
* | 匹配0个或多个字符 |
** | 匹配所有文件、目录、子目录以及子目录中的文件(Python3.5新增) |
? | 匹配一个字符 |
[] | 匹配指定范围内的字符,比如:[0-9]匹配数字,[a-z]匹配小写字母 |
2.glob模块中常用的3个函数
glob库有3个主要函数供我们使用,它们分别是glob()、iglob()、escape()函数。
glob.glob(pathname,recursive=False):返回符合匹配条件的所有文件的路径;
参数pathname:搜索的相对路径
recursive=False:代表递归调用,与特殊通配符“**”一同使用,默认为False,False表示不递归调用,True表示递归调用;
glob.iglob():返回一个迭代器对象,需要循环遍历获取每个元素,得到的也是符合匹配条件的所有文件的路径;
glob.escape():escape可以忽略所有的特殊字符,就是星号、问号、中括号,用处不大;
值得注意的是recursive=False:代表递归调用,与特殊通配符“**”一同使用,默认为False,False表示不递归调用,True表示递归调用;
下面我们来看一个例子
在电脑的D盘下,有my_pictures文件夹,该文件夹中包含许多.bmp .png .tif .jpg等格式的图片,文件夹下还有一个子文件夹level1, 该文件夹中同样包含许多.bmp .png .tif .jpg等格式的图片,该文件夹下还有一个子文件夹level2,文件夹中同样包含多张图片。
任务一:找出my_pictures文件夹下以.jpg为后缀的图片(不含子目录)
import glob;
path = r"D:my_pictures\*.jpg"#表示找出路径下所有以.jpg为后缀的图片
list=glob.glob(path)
print(list)
不难看出通配符*号在这里匹配任意名称的jpg格式的图片。
调用glob()方法返回的是一个列表,同样我们也可以调用iglob()方法,不过该方法返回的是一个迭代器。如图:
任务二:找出my_pictures文件夹下图片文件名称包含小写字母o的图片路径(不含子目录)
这里匹配规则应该写成D:my_pictures\*o*
我们也可以调用glob()函数完成这个小任务,不过只要匹配规则书写正确,调用这两个函数都是一样的道理。
任务三:找出子目录level1下图片名为img*的jpg图片路径(不含子目录)
通配符?表示一个字符,img?.jpg可以匹配img1.jpg img2.jpg等
任务三: 找出目录level1下图片名包含数字的图片路径(不含子目录)
注意:匹配规则式子为*[0-9]*.*
而如果匹配式书写为*[0-9]*会匹配到子目录level2
任务四:找出my_pictures中所有.jpg格式的图片(包含子目录)
注意:匹配规则式子为**\*.jpg 并且参数recursive=True