fnmatch:Unix式glob模式匹配,简单场景下可以代替正则
介绍
fnmatch是模块用来匹配(通过glob模式、如Unix shell所使用的的模式)文件名的
简单匹配
import fnmatch
'''
fnmatch将一个文件名与一个模式进行比较,并返回一个布尔值,指示二者是否匹配。
?:匹配一个任意字符
*:匹配任意个任意字符
[sequence]:匹配出现在sequence里面的一个字符
[!sequence]:匹配没有出现在sequence里面的一个字符
[a-m]:匹配出现在abcdef...m中的字符
[A-M]:匹配出现在ABCDEF...M中的字符
[0-9]:匹配出现在0123...9中的字符
'''
# 虽说是用来匹配文件名的,但是我们匹配普通的字符串也是可以的
# 注意返回的是一个bool值
print(fnmatch.fnmatch("abcde", "*")) # True
print(fnmatch.fnmatch("abcde", "abc?")) # False
print(fnmatch.fnmatch("abcde", "abc??")) # True
print(fnmatch.fnmatch("abcde", "[a-z]????")) # True
print(fnmatch.fnmatch("aaa", "aaa*")) # True
print(fnmatch.fnmatch("1ab", "[0-1]??")) # True
# 注意fnmatch默认是大小写不敏感的
print(fnmatch.fnmatch("Aaa", "aaa")) # True
# 如果我想区分大小写呢?可以使用fnmatchcase
print(fnmatch.fnmatchcase("Aaa", "aaa")) # False
import os
for name in os.listdir(r"C:\python37\Lib\asyncio"):
if fnmatch.fnmatch(name, "base_*.py"):
print(name)
'''
base_events.py
base_futures.py
base_subprocess.py
base_tasks.py
'''
过滤
import fnmatch
import os
from pprint import pprint
'''
要测试一个文件名序列,可以使用filter,会返回与模式参数匹配的文件名列表
'''
f = os.listdir(r"C:\python37\Lib\asyncio")
pprint(f)
'''
['base_events.py',
'base_futures.py',
'base_subprocess.py',
'base_tasks.py',
'constants.py',
'coroutines.py',
'events.py',
'format_helpers.py',
'futures.py',
'locks.py',
'log.py',
'proactor_events.py',
'protocols.py',
'queues.py',
'runners.py',
'selector_events.py',
'sslproto.py',
'streams.py',
'subprocess.py',
'tasks.py',
'transports.py',
'unix_events.py',
'windows_events.py',
'windows_utils.py',
'__init__.py',
'__pycache__']
'''
print(fnmatch.filter(f, "base_*.py"))
'''
['base_events.py', 'base_futures.py', 'base_subprocess.py', 'base_tasks.py']
'''
转换模式
import fnmatch
'''
在内部,fnmatch将glob模式转换为一个正则表达式,并使用re模块比较文件名和模式。
translate函数是将glob模式转换为正则表达式的公共API
'''
pattern = "base_*.py"
print(fnmatch.translate(pattern)) # (?s:base_.*\.py)\Z
fnmatch:Unix式glob模式匹配,简单场景下可以代替正则的更多相关文章
- .net测试篇之测试神器Autofixture在几个复杂场景下的使用示例以及与Moq结合
系列目录 为String指定一个值. 在第三节里我们讲了如何使用自定义配置加上一个自定义算法生成一个自定义字符串,然而有些时候我们仅仅是需要某个字段是有意义的,这个时候随便生成的字符串也满足不了我们的 ...
- 亿级流量场景下,大型缓存架构设计实现【1】---redis篇
*****************开篇介绍**************** -------------------------------------------------------------- ...
- 超大规模商用 K8s 场景下,阿里巴巴如何动态解决容器资源的按需分配问题?
作者 | 张晓宇(衷源) 阿里云容器平台技术专家 关注『阿里巴巴云原生』公众号,回复关键词"1010",可获取本文 PPT. 导读:资源利用率一直是很多平台管理和研发人员关心的话 ...
- API 管理在云原生场景下的机遇与挑战
作者 | 张添翼 来源 | 尔达Erda公众号 云原生下的机遇和挑战 标准和生态的意义 自从 Kubernetes v1.0 于 2015 年 7 月 21 日发布,CNCF 组织随后建立以来,其 ...
- ADO.NET Entity Framework 在哪些场景下使用?
在知乎回答了下,顺手转回来. Enity Framework已经是.NET下最主要的ORM了.而ORM从一个Mapping的概念开始,到现在已经得到了一定的升华,特别是EF等对ORM框架面向对象能力的 ...
- 不同场景下 MySQL 的迁移方案
一 目录 一 目录 二 为什么要迁移 三 MySQL 迁移方案概览 四 MySQL 迁移实战 4.1 场景一 一主一从结构迁移从库 4.2 场景二 一主一从结构迁移指定库 4.3 场景三 一主一从结构 ...
- devi into python 笔记(五)异常 文件操作 sys os glob模块简单实用
异常: Java异常: try catch块处理异常,throw引发异常. Python异常: try except块处理异常,raise引发异常. 异常如果不主动处理,则会交给Python中的缺省处 ...
- CI Weekly #11 | 微服务场景下的自动化测试与持续部署
又一周过去了,最近我们的工程师正在搞一个"大事情" --「[flow.ci](http://flow.ci/?utm_source=bokeyuan&utm_medium= ...
- asp.net core中负载均衡场景下http重定向https的问题
上周欣喜地发现,微软官方终于针对 asp.net core 在使用负载均衡的情况下从 http 强制重定向至 https 的问题提供了解决方法. app.UseForwardedHeaders(new ...
随机推荐
- 查看oracle数据库的链接数和用户
http://www.cnblogs.com/is1988/archive/2012/11/21/2780067.html 1.查询oracle的连接数select count(*) from v$s ...
- React Native npm第三方报错
添加npm install第三方报错: 使用: yarn add 组件名称 注意: 这里不需要像npm的--save
- Java工程师学习指南第8部分:分布式系统理论与实践
本文整理了微信公众号[Java技术江湖]发表和转载过的分布式相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧. 细聊分布式ID生成方法 近期面试Java后端的一些感悟 本专栏介绍分布式的 ...
- How to add Facebook’s Customer Chat Plugin to your website
How to add Facebook’s Customer Chat Plugin to your website By Gerardo Salandra Do you need a live c ...
- [Kevin英语情报局]那些年我们说过的中式英语
一. blonde hair 金色头发 grey hair 白头发 baijiu 白酒 white wine 白葡萄酒 I don't think it's right 我认为不正确 I'm chin ...
- 启动Nginx 出现 nginx: [emerg] unknown directive "锘?user" 错误
出现这种情况 一般是修改配置文件 nginx.conf 造成的 如果你修改文件后出现 那基本上就是这个原因 启动不了 重新打开 改为UTF-8 无BOM编码
- vue 页面 添加背景音乐
背景音乐 添加背景音乐 并有单击事件 循环播放 <template> <div id="page"> <div style="width ...
- Minimizing Difference 【思维】
题目链接: https://vjudge.net/contest/336389#problem/B 题目大意: 给出一个长度为n的数列以及操作次数k.k的范围为1e14.每次操作都可以选择给任意一个数 ...
- PYTHON 100days学习笔记008-3:输入和输出
目录 Day008-03:Python3 输入和输出 1.输出格式美化 1.1 str.format()用法 1.2 旧式字符串格式化 2.读取键盘输入 3.读和写文件 4.文件对象的方法 4.1 f ...
- 牛客小白月赛16 H 小阳的贝壳 (差分+线段树)
链接:https://ac.nowcoder.com/acm/contest/949/H来源:牛客网 题目描述 小阳手中一共有 n 个贝壳,每个贝壳都有颜色,且初始第 i 个贝壳的颜色为 colico ...