python-glob查找特定文件
python-glob查找特定文件
glob模块可以查找当前脚本目录(相对路径)下或者某一指定目录(绝对路径)符合特定规则的文件路径名
glob 文件名模式匹配,不用遍历整个目录判断每个文件是不是符合。
只用到三个匹配符
* 通配符:匹配0个或多个字符;
? 单个字符通配符:匹配单个字符;
[] 字符范围:匹配指定范围内的字符,如:[0-9]匹配数字。
通配符 | 功能 | ||
---|---|---|---|
* | 匹配0或多个字符 | ||
** | 匹配所有文件,目录,子目录和子目录里面的文件 | ||
? | 匹配一个字符,这里与正则表达式? (正则?匹配前面表达式0次或者1次) | ||
[] | 匹配指定范围内的字符,如: [1-9]匹配1至9内的字符 | ||
[!] | 匹配不在指定范围内的字符 |
glob.glob
返回所有匹配的文件路径列表。
只有一个参数 pathname :定义了文件路径匹配规则;可以是绝对路径,可以是相对路径
import glob
#获取指定目录下的所有图片
print (glob.glob(r"/home/qiaoyunhao/*/*.jpg"))#加上r让字符串'/'不产生转义
#获取上级目录的所有.py文件
print (glob.glob(r'../*.py')) #相对路径
glob.iglob
获取一个生成器对象,使用它可以逐个获取匹配的文件路径名。
与 glob.glob()的区别: glob.glob()同时获取所有的匹配路径;而 glob.iglob()一次只获取一个匹配路径
import glob
#父目录中的.py文件
f = glob.iglob(r'../*.py')
print(type(f)) # <class 'generator'>
print (f) #<generator object iglob at 0x00B9FF80>
for py in f:
print (py)
案例
当前路径下所有py文件
for fname in glob.glob("**/*.py",recursive=True):
print(fname)
当前路径文件tmp下py文件
for fname in glob.glob("./tmp/*.py"):
print(fname)