python fnmatch & glob
1,转载:Python模块学习 - fnmatch & glob - Dahlhin - 博客园 (cnblogs.com)
介绍
fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库。
fnmatch模块
大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里介绍标准库fnmatch。这个库专门用来做文件名匹配
fnmatch支持的通配符
fnmatch支持的通配如下:
通配符 | 含义 |
* | 匹配任何数量的字符 |
? | 匹配单个字符 |
[seq] | 匹配seq中的字符 |
[!seq] | 匹配除seq以外的任何字符 |
fnmatch的基本使用
fnmatch这个库相对比较简单,只有4个函数,分别是fnmatch、fnmatchcase、filter和translate,其中最常用的是fnmatch。主要功能如下:
-
- fnmatch:判断文件名是否符合特定的模式。
- fnmatchcase:判断文件名是否符合特定的模式,区分大小写。
- filter:返回输入列表中,符合特定模式的文件名列表。
- translate:将通配符模式转换成正则表达式。
例子
fnmatch和fnmatchcase用法相同,判断名称是否符合表达式,返回True or False
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
>>> os.listdir(os.curdir) [ 'A1.jpg' , 'a1.txt' , 'a2.txt' , 'aA.txt' , 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name, '*.jpg' ) ] [ 'A1.jpg' , 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name, "[ab]*" ) ] [ 'a1.txt' , 'a2.txt' , 'aA.txt' , 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name, "[!a]*" ) ] [ 'A1.jpg' , 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name, "b?.jpg" ) ] [ 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatchcase(name, "A?.jpg" ) ] [ 'A1.jpg' ] |
filter和fnmatch类似,只不过filter接受的第一个参数是一个文件名列表,返回符合表达式的列表(即:筛选)
1
2
3
4
5
6
|
>>> name = os.listdir(os.curdir) >>> name [ 'A1.jpg' , 'a1.txt' , 'a2.txt' , 'aA.txt' , 'b3.jpg' , 'b2.jpg' , 'b1.jpg' ] >>> fnmatch. filter (name, '*.txt' ) [ 'a1.txt' , 'a2.txt' , 'aA.txt' ] >>> |
glob模块
我们前面的fnmatch模块,都是利用os.listdir获取文件列表,然后通过字符串fnmatch模块进行文件名匹配的,而在Python中还有更加简单的方式,即使用glob库。
glob的作用就相当于os.listdir 加上 fnmatch。使用glob以后就不用使用os.listdir获取文件列表了。
glob比fnmatch更简单,因为他只有 glob,iglob,escape三个函数。
glob基本使用
glob和iglob的区别在于glob返回的是一个列表,iglob返回的是一个生成器对象
1
2
3
4
5
6
7
8
9
10
11
|
>>> import glob >>> glob.glob( '*.txt' ) [ 'a1.txt' , 'a2.txt' , 'aA.txt' ] >>> g = glob.iglob( '*.txt' ) # 使用iglob返回的是一个生成器 >>> g <generator object _iglob at 0x1050bbba0 > >>> list (g) [ 'a1.txt' , 'a2.txt' , 'aA.txt' ] >>> |
PS:glob同样支持通配符和fnmatch相同,这里不在列举,并且在通配符表达式中支持路径
1
2
3
|
>>> glob.glob( '/Users/DahlHin/github/test/*.txt' ) [ '/Users/DahlHin/github/test/a1.txt' , '/Users/DahlHin/github/test/a2.txt' , '/Users/DahlHin/github/test/aA.txt' ] >>> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2020-04-27 axi协议之二:2.2 写数据通道+写响应通道+读地址通道+读数据(rsp)通道 信号说明
2020-04-27 axi协议之二:2.1 五通道说明+写地址通道信号说明