Python fnmatch模块:利用通配符进行高效文件名匹配
本文介绍Python中fnmatch模块的使用方法。该模块支持UNIX shell风格的通配符(如*、?、[]),提供filter、fnmatch、fnmatchcase和translate等核心函数,用于实现比简单字符串更灵活但比正则表达式更简洁的文件名匹配与过滤操作。
fnmatch模块概述
fnmatch模块专为文件名匹配设计,其功能介于简单字符串匹配与正则表达式之间。当数据处理场景仅需通过基础通配符完成文件名筛选时,采用该模块是更为便捷的选择。
核心函数介绍
fnmatch模块提供了多个常用函数,具体功能详见表1。
Python fnmatch模块常用函数及功能
| 函数名 | 功能 |
| fnmatch.filter(names, pattern) | 对 names 列表进行过滤,返回 names 列表中匹配 pattern 的文件名组成的子集合。 |
| fnmatch.fnmatch(filename, pattern) | 判断 filename 文件名,是否和指定 pattern 字符串匹配 |
| fnmatch.fnmatchcase(filename, pattern) | 和 fnmatch() 函数功能大致相同,只是该函数区分大小写。 |
| fnmatch.translate(pattern) | 将一个 UNIX shell 风格的 pattern 字符串,转换为正则表达式 |
通配符规则详解
该模块在匹配文件名模式时,遵循UNIX shell风格,支持以下通配符规则:
- *:用于匹配任意数量的任意字符。
- ?:用于匹配单个任意字符。
- [字符序列]:用于匹配中括号内字符序列中的任一字符。此序列支持连字符表示范围,例如[a-c]可匹配a、b或c中的任意一个字符。
- [!字符序列]:用于匹配不在中括号内字符序列中的任一字符。
代码示例与输出
以下代码示例演示了表1中部分函数的具体用法与执行效果:
import fnmatch
#filter()
print(fnmatch.filter(['dlsf', 'ewro.txt', 'te.py', 'youe.py'], '*.txt'))
#fnmatch()
for file in ['word.doc','index.py','my_file.txt']:
if fnmatch.fnmatch(file,'*.txt'):
print(file)
#fnmatchcase()
print([addr for addr in ['word.doc','index.py','my_file.txt','a.TXT'] if fnmatch.fnmatchcase(addr, '*.txt')])
#translate()
print(fnmatch.translate('a*b.txt'))
程序运行输出结果如下:
['ewro.txt'] my_file.txt ['my_file.txt'] (?s:a.*b\.txt)\Z
以上内容涵盖了Python fnmatch模块的核心用法,希望能为读者的编程实践提供有益参考。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













