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 ...
随机推荐
- 查看mycat日志
查看日志: tail -f /usr/local/mycat/logs/wrapper.log
- 合并多个tensorflow模型的办法
直接上代码: import tensorflow as tf from tensorflow.python.tools import freeze_graph from tensorflow.pyth ...
- Unit Testing, Integration Testing and Functional Testing
转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...
- redis 获取方式和安装(windows)
Windows redis :https://github.com/MSOpenTech/redis/releases Linux redis :https://github.com/phpredis ...
- gdb调试工具学习
GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比 ...
- vim bundle安装
一.准备工作 安装Git(因为下面我们选择的插件管理器需要使用到它)安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步 ...
- kafka 名词解释(四)
为什么要了解这些名词的解释呢?因为在学一个新的知识或者领域的时候,我们需要知道它所定义的概念和名词意思,因为只有这样我们才能理解和掌握这个新的知识点,才能更加系统的掌握这个技术. 一.名词解释 1.b ...
- lua介绍及环境搭建(一)
一.介绍 1.简介 Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 其设计目的是为了嵌入应用程序中,从 ...
- Flask Bug记录之JinJa2.exceptions.UndefinedError: 'sqlite3.Row object' has no attribute 'get'
源码 py文件定义db的工厂函数如下 def get_db(): if "db" not in g: g.db = sqlite3.connect( current_app.con ...
- 网络编程[第二篇]基于udp协议的套接字编程
udp协议下的套接字编程 一.udp是无链接的 不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...