python中的glob模块主要是用于寻找文件,在寻找文件的时候,可以采用通配符来匹配多个文件。glob模块中有三个函数:glob,iglob和escape。最常用的就是glob函数,这里我们也只介绍这一个函数。
函数参数
glob(pathname, recursive=False)
- pathname:参数表示路径以及文件名
- recursive:表示是否需要递归查找每一个子文件夹
通配符
符号 | 功能 |
---|---|
* | 匹配0或者多个字符 |
? | 匹配单个字符 |
[exp] | 匹配范围内字符,[0-9]匹配数字 |
[!exp] | 匹配范围外字符 |
** | 匹配文件夹里所有文件,包括子文件夹,需要与recursive = True一起使用 |
举例
示例1:
from glob import glob
x = glob(r"C:\Users\Mr.Reliable\Desktop\*.txt")#匹配桌面所有txt文件
print(type(x)) ##list
print(len(x)) ## 2
print(x) #['优快云.txt', 'metadata.txt']
示例2:
我们使用VCTK文件夹来举例,这是一个储存音频文件的文件夹,文件夹内部包括三个文件:COPYING,README,speaker-info.txt;两个文件夹:txt和wav48。其中wav48文件夹内部包括了108个说话人文件夹,每个说话人文件夹里面才是音频文件,文件以.wav格式结尾。我们现在要匹配所有音频文件。假设我们现在就在VCTK文件夹中。
from glob import glob
x = glob("**/*.wav",recursive = True)
print(len(x)) #44085
y = glob("*/*/*.wav",recursive = False)
print(len(y)) #44085
可以发现两次匹配的结果是一样的,一般如果为了搜索某个文件夹,我们采用**通配符,如果是为了找到一个文件夹下的文件,我们还是采用*通配符,不断进入目录稳妥一些。