glob的应用场景是要寻找一系列(符合特定规则)文件名。
glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。查找文件只用到三个匹配符:”*”, “?”, “[]”。
- ”*”匹配0个或多个字符;
- ”?”匹配单个字符;
- ”[ ]”匹配指定范围内的字符,如:[0-9]匹配数字。
假设以下例子目录是这样的。
1、匹配所有文件:可以用*匹配任意长度字节。glob.glob比较常用,返回一个list,也可用glob.iglob返回生成器。
import glob
glob.glob('./Desktop/dir/*')
Out[42]:
['./Desktop/dir\\file.txt',
'./Desktop/dir\\file1.txt',
'./Desktop/dir\\file2.txt',
'./Desktop/dir\\filea.txt',
'./Desktop/dir\\fileb.txt',
'./Desktop/dir\\subdir']
glob.glob('./Desktop/dir/*/*')
Out[43]: ['./Desktop/dir\\subdir\\subflie.txt']
匹配子目录文件
可以指定子目录名称,也可以用通配符代替,不显示指定。
print('Named explicitly:')
for name in glob.glob('Desktop/dir/subdir/*'):
print('\t', name)
print('Named with wildcard:')
for name in glob.glob('Desktop/dir/*/*'):
print('\t', name)
Named explicitly:
Desktop/dir/subdir\subflie.txt
Named with wildcard:
Desktop/dir\subdir\subflie.txt
2、单字节通配符匹配,除了*以外,还有?匹配单个字符。比如下面这个例子,匹配以file开头,以.txt结尾,中间是任一字符的文件。
for name in glob.glob('Desktop/dir/file?.txt'):
print(name)
Desktop/dir\file1.txt
Desktop/dir\file2.txt
Desktop/dir\filea.txt
Desktop/dir\fileb.txt
3、字符区间匹配[0-9],比如匹配后缀前是数字的文件。
for name in glob.glob('Desktop/dir/*[0-9].*'):
print(name)
Desktop/dir\file1.txt
Desktop/dir\file2.txt