Python文件路径查找之glob模块

python中的glob模块是用来查找匹配文件的,相比os.listdir()其可以支持模式匹配查找(Unix shell中的匹配规则),还支持返回文件绝对路径。Unix shell中的匹配规则如下:

1
2
3
4
* matches everything
? matches any single character
[seq] matches any character in seq
[!seq] matches any char not in seq

glob.glob(pathname)

返回所有匹配的文件路径列表。其只有一个参数pathname,定义了文件路径匹配规则,可以是绝对路径,也可以是相对路径。

1
2
3
4
5
6
7
import glob
#返回的结果是绝对路径列表:指定目录下所有txt文件
print glob.glob('E:/task/*/*.txt')
#返回的结果是相对路径列表:上级目录下所有py文件
print glob.glob('../*.py')

glob.iglob(pathname)

返回的是匹配的文件路径生成器,即可以使用它逐个获取匹配的文件路径名。与glob.glob(pathname)的区别是 : glob.glob(pathname)一次性获取所有的匹配路径,glob.iglob(pathname)一次只获取一个匹配路径。

1
2
3
4
5
6
7
8
import glob
result = glob.iglob('../*.py')
print result #<generator object iglob at 0x02587648>
for file in result:
print file

两点注意

注意一:glob匹配规则中把以点.开头的文件作为特殊情况。假设当前路径下有两个文件card.gif.card.gif

1
2
3
4
5
import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']

注意二:glob匹配规则中默认不递归匹配文件夹,在python 3.5 +可以设置recursive,并在匹配规则中用**来实现递归匹配

1
2
3
4
import glob
for filename in glob.iglob('src/**/*.c', recursive=True):
print(filename)

大师兄 wechat
欢迎关注我的微信公众号:Python大师兄