前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python fnmatch模块

python fnmatch模块

作者头像
周小董
发布2019-03-25 10:33:04
1.1K0
发布2019-03-25 10:33:04
举报
文章被收录于专栏:python前行者python前行者

简单记录一下fnmatch模块的使用,此模块的主要作用是文件名称的匹配,并且匹配的模式使用的unix shell风格。字面意思感觉就是filename match

fnmatch比较简单就4个方法分别是:fnmatch,fnmatchcase,filter,translate

image.png
image.png

如下例子所示:

代码语言:javascript
复制
import os
import fnmatch
 
for filename in os.listdir('.'):
    if fnmatch.fnmatch(filename,'*.txt'): #匹配模式为星号,表示任意的字符
        print(filename)

例子中,主要使用os.listdir来列出当前目录中的文件,如果匹配的后缀为.txt,那么就打印出来,fnmatch.fnmatch是一个布尔函数,返回为True或者Faulse。

主要使用的匹配模式如下:

代码语言:javascript
复制
if fnmatch.fnmatch('kel','?el'): #匹配模式为问号,及匹配一个任意字符
    print('match')
 
if fnmatch.fnmatch('kel','[a-z]el'): #匹配模式为单个字符,在a-z之间
    print('match')
 
if fnmatch.fnmatch('1el','[!a-z]el'):#匹配模式为不能是a-z之间的字符
    print('match')

问号相当于一个占位符,从而能匹配 k是字母a-z之间的字母,从而能匹配 数字1不在a-z之间的字母,从而能匹配


1.fnmatch

fnmatch.fnmatch(filename, pattern) 测试filename,是否符合pattern。

代码语言:javascript
复制
import fnmatch
import os
def run():
  for file in os.listdir('.'): #os.listdir返回指定的文件夹包含的文件或文件夹的名字的列表
        if fnmatch.fnmatch(file, '*.py'): #判断是否有后缀为.py的文件,*代表文件名长度格式不限制。
           print(file)
if __name__ == '__main__':
    run()

2.fnmatchcase

fnmatch.fnmatchcase(filename, pattern) 和fnmatch()类似,只是fnmatchcase 强制区分大小写匹配,不管文件系统是否区分。

代码语言:javascript
复制
  print(fnmatch.fnmatchcase("text.py","text.*"))  #True
  print(fnmatch.fnmatchcase("Text.py", "text.*"))  # False
  print(fnmatch.fnmatchcase("Text.Py", "*.py"))  # False
  print(fnmatch.fnmatchcase("Text.Py", "*.Py"))  # True

3.filter

fnmatch.filter(names, pattern) 实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表,它的作用类似 [n for n in names if fnmatch(n, pattern)]

代码语言:javascript
复制
  filelist=["a.text","b.jpg","c.png","d.py",'e.text',"sss.py"]
  print(fnmatch.filter(filelist,"?.py")) #匹配前面是一个字符的.py文件
  输出:d.py

4.translate

fnmatch.translate(pattern): 翻译模式, fnmatch将这种全局模式转换成一个正则式, 然后使用re模块来比较名字和模式。 translate() 函数是一个公共API用于将全局模式转换成正则式

代码语言:javascript
复制
regex = fnmatch.translate('[f,d,d,d,g,h].txt')#将[f,d,d,d,g,h].txt转为正则匹配的模式
print("regex",regex)#(?s:[f,d,d,d,g,h]\.txt)\Z
#\Z:匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
reobj = re.compile(regex)#生成re匹配模块
print(reobj.match ('f.txt'))#返回一个匹配对象
#<_sre.SRE_Match object; span=(0, 5), match='f.txt'>

参考:https://blog.csdn.net/kellyseeme/article/details/51284494 https://www.cnblogs.com/c-x-a/p/9261621.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年12月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.fnmatch
  • 2.fnmatchcase
  • 3.filter
  • 4.translate
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档