Python通过fnmatch模块实现文件名匹配
fnmatch模块主要用于文件名称的匹配,其能力比简单的字符串匹配更强大,但比使用正则表达式相比稍弱。。如果在数据处理操作中,只需要使用简单的通配符就能完成文件名的匹配,则使用fnmatch模块是不错的选择。
fnmatch模块中,常用的函数及其功能如表1所示。
Pythonfnmatch模块常用函数及功能
函数名 | 功能 |
fnmatch.filter(names,pattern) | 对names列表进行过滤,返回names列表中匹配pattern的文件名组成的子集合。 |
fnmatch.fnmatch(filename,pattern) | 判断filename文件名,是否和指定pattern字符串匹配 |
fnmatch.fnmatchcase(filename,pattern) | 和fnmatch()函数功能大致相同,只是该函数区分大小写。 |
fnmatch.translate(pattern) | 将一个UNIXshell风格的pattern字符串,转换为正则表达式 |
fnmatch模块匹配文件名的模式使用的就是UNIXshell风格,其支持使用如下几个通配符:
- *:可匹配任意个任意字符。
- ?:可匹配一个任意字符。
- [字符序列]:可匹配中括号里字符序列中的任意字符。该字符序列也支持中画线表示法。比如[a-c]可代表a、b和c字符中任意一个。
- [!字符序列]:可匹配不在中括号里字符序列中的任意字符。
例如,下面程序演示表1中一些函数的用法及功能:
importfnmatch #filter() print(fnmatch.filter(['dlsf','ewro.txt','te.py','youe.py'],'*.txt')) #fnmatch() forfilein['word.doc','index.py','my_file.txt']: iffnmatch.fnmatch(file,'*.txt'): print(file) #fnmatchcase() print([addrforaddrin['word.doc','index.py','my_file.txt','a.TXT']iffnmatch.fnmatchcase(addr,'*.txt')]) #translate() print(fnmatch.translate('a*b.txt'))
程序执行结果为:
['ewro.txt']
my_file.txt
['my_file.txt']
(?s:a.*b\.txt)\Z
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。