用glob模块可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索很像。查找文件只用到三个匹配符:””, “?”, “[]”。””匹配0个或多个字符;”?”匹配单个字符;”[]”匹配指定范围内的字符,如:[0-9]匹配数字。
1、通配符
星号(*)匹配零个或多个字符
import glob
for name in glob.glob('dir/*'):
print (name)
dir/file.txt
dir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt
dir/subdir
列出子目录中的文件,必须在模式中包括子目录名:
import glob
#用子目录查询文件
print ('Named explicitly:')
for name in glob.glob('dir/subdir/*'):
print ('\t', name)
#用通配符* 代替子目录名
print ('Named with wildcard:')
for name in glob.glob('dir/*/*'):
print ('\t', name)
Named explicitly:
dir/subdir/subfile.txt
Named with wildcard:
dir/subdir/subfile.txt
2、单个字符通配符
用问号(?)匹配任何单个的字符。
import glob
for name in glob.glob('dir/file?.txt'):
print (name)
dir/file1.txt
dir/file2.txt
dir/filea.txt
dir/fileb.txt
3、字符范围
当需要匹配一个特定的字符,可以使用一个范围,写在方框[ ]里
import glob
for name in glob.glob('dir/*[0-9].*'):
print (name)
dir/file1.txt
dir/file2.txt
glob.glob
返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。输出类型是list型。
import glob
file = glob.glob(r'D:\Data\DOI\*\*\*\*.dcm')
print(type(file))
print(file)
#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径
glob.iglob
获取一个可编历对象( iterator ),使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。对于大量文件时更为省内存。
import glob
#父目录中的.py文件
f = glob.iglob(r'../*.py')
print ( f )
for py in f:
print (py)