首页 > Python基础教程 > Python文件操作(I/O)
阅读:2,179
Python fnmatch模块:用于文件名的匹配
前面介绍的那些操作目录的函数只能进行简单的模式匹配,但 fnmatch 模块可以支持类似于 UNIX shell 风格的文件名匹配。
fnmatch 匹配支持如下通配符:
在该模块下提供了如下函数:
fnmatch 匹配支持如下通配符:
- *:可匹配任意个任意字符。
- ?:可匹配一个任意字符。
- [字符序列]:可匹配中括号里字符序列中的任意字符。该字符序列也支持中画线表示法。比如[a-c]可代表a、b 和 c 字符中任意一个。
- [!字符序列]:可匹配不在中括号里字符序列中的任意字符。
在该模块下提供了如下函数:
-
fnmatch.fnmatch(filename, pattern):判断指定文件名是否匹配指定 pattern。如下程序示范了 fnmatch() 函数的用法:
from pathlib import * import fnmatch # 遍历当前目录下所有文件和子目录 for file in Path('.').iterdir(): # 访问所有以_test.py结尾的文件 if fnmatch.fnmatch(file, '*_test.PY'): print(file)
上面程序先遍历当前目录下的所有文件和子目录,然后第 7 行代码调用 fnmatch() 函数判断所有以 _test.py 结尾的文件,并将该文件打印出来。 - fnmatch.fnmatchcase(filename, pattern):该函数与上一个函数的功能大致相同,只是该函数区分大小写。
-
fnmatch.filter(names, pattern):该函数对 names 列表进行过滤,返回 names 列表中匹配 pattern 的文件名组成的子集合。如下代码示范了该函数的功能:
names = ['a.py', 'b.py', 'c.py', 'd.py'] # 对names列表进行过滤 sub = fnmatch.filter(names, '[ac].py') print(sub) # ['a.py', 'c.py']
上面程序定义了一个['a.py', 'b.py', 'c.py', 'd.py']
集合,该集合中的 4 个元素都代表了指定文件(实际上文件是否存在,fnmatch 模块并不关心)。接下来程序中第 3 行代码调用了 filter() 函数对 names 进行过滤,过滤完成后只保留匹配 [ac].py 模式的文件名(要求文件名要么是 a.py,要么是 c.py)。 -
fnmatch.translate(pattern):该函数用于将一个 UNIX shell 风格的 pattern 转换为正则表达式 pattern。如下代码示范了该函数的功能:
print(fnmatch.translate('?.py')) # (?s:.\.py)\Z print(fnmatch.translate('[ac].py')) # (?s:[ac]\.py)\Z print(fnmatch.translate('[a-c].py')) # (?s:[a-c]\.py)\Z
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频