python标准库之glob模块:查找符合特定规则的文件路径名
前言
1、glob模块可以查找当前脚本目录(相对路径)下或者某一指定目录(绝对路径)符合特定规则的文件路径名,跟使用windows下的文件搜索差不多。
2、查找文件只用到三个匹配符:*,?, []。
①*通配符:匹配0个或多个字符;
②?单个字符通配符:匹配单个字符;
③[]字符范围:匹配指定范围内的字符,如:[0-9]匹配数字。
glob模块的用法
glob.glob
①返回所有匹配的文件路径列表。
②只有一个参数 pathname :定义了文件路径匹配规则;可以是绝对路径,可以是相对路径。
代码示例:
import glob #获取指定目录下的所有图片 print (glob.glob(r"/home/qiaoyunhao/*/*.png"))#加上r让字符串'/'不产生转义 #获取上级目录的所有.py文件 print (glob.glob(r'../*.py')) #相对路径
运行结果:
glob.iglob
①获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。
②与 glob.glob()的区别: glob.glob()同时获取所有的匹配路径;而 glob.iglob()一次只获取一个匹配路径。
代码示例:
import glob #父目录中的.py文件 f = glob.iglob(r'../*.py') print (f) #<generator object iglob at 0x00B9FF80> for py in f: print (py)
运行结果:
查找路径
通配符
星号(*)匹配零个或多个字符
代码示例
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 for name in glob.glob('dir/file?.txt'): print (name)
运行结果:
dir/file1.txt dir/file2.txt dir/filea.txt dir/fileb.txt
字符范围
当需要匹配一个特定的字符,[]表示匹配指定范围内的字符。
代码示例:
import glob for name in glob.glob('dir/*[0-9].*'): print (name)
运行结果:
dir/file1.txt
dir/file2.txt
glob模式
前言
在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名。
例如:Unix命令:在某一目录中将目录内所有以扩展名为.txt的文件从当前目录拷贝到textfiles目录。
mv *.txt textfiles/ # 这里【*】是一个匹配任意数量字符基本通配符,*.txt就表示一个glob模式。另一个通用的通配符是【?】,它表示任意一个字符。
最常用的通配符是 *,?,[…]:
通配符 | 描述 | 例子 | 匹配 | 不匹配 |
---|---|---|---|---|
* | 匹配任意数量的字符包括空字符 | Law* | Law, Laws, or Lawyer | |
*Law* | Law, GrokLaw, or Lawyer. | |||
? | 匹配任意一个字符 | ?at | Cat, cat, Bat or bat | at |
[abc] | 匹配任意一个包含的字符 | [CB]at | Cat or Bat | cat or bat |
[a-z] | 匹配任意一个给定范围的字符 | Letter[0-9] | Letter0, Letter1 etc. | Letters or Letter |
【注意】在所有以上例子中,路径分隔符(unix的/,windows的\)都不会被匹配。
在Linux和POSIX系统中[…]有以下两个扩展:
通配符 | 描述 | 例子 | 匹配 | 不匹配 |
---|---|---|---|---|
[!abc] | 不匹配任意一个包含的字符 | [!C]at | Bat, bat, or cat | Cat |
[!a-z] | 不匹配任意一个给定范围的字符 | Letter[!3-5] | Letter1, Letter2 etc. | Letter3, Letter4 or Letter5 |
与正则的比较:
Glob的通配符 | 等价正则的表达式 |
---|---|
? | . |
* | .* |
【注意】glob尝试匹配整个字符串(例如,S*.DOC将匹配S.DOC和SA.DOC,但不匹配POST.DOC或SURREY.DOCKS);正则只匹配子串除非使用^和$。所以S*.DOC的等价正则是^S.*\.DOC$。
node glob对常用通配符又做了一些扩展:
通配符 | 描述 | 例子 | 匹配 | 不匹配 |
---|---|---|---|---|
** | 匹配任意数量的字符包括空字符(包括路径分隔符) | **/*.js | /a/b/c.js | |
!(pattern|pattern) | 匹配除了()内以外的pattern | !(abc|bcd) | aaa,bbb | abc.bcd |
?(pattern|pattern) | 匹配至多一个()内的pattern | ?(abc|bcd) | abc | bbb |
+(pattern|pattern) | 匹配至少一个()内的pattern | +(abc|bcd) | abc | bbb |
*(pattern|pattern) | 匹配任意个()内的pattern | *(abc|bcd) | abc | bbb |
@(pattern|pattern) | 精确匹配()内的其中一个pattern | @(abc|bcd) | abc | abd |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!