【转】Python模块学习 - fnmatch & glob
【转】Python模块学习 - fnmatch & glob
介绍
fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库。
fnmatch模块
大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里介绍标准库fnmatch。这个库专门用来做文件名匹配
fnmatch支持的通配符
fnmatch支持的通配如下:
| 通配符 | 含义 |
| * | 匹配任何数量的字符 |
| ? | 匹配单个字符 |
| [seq] | 匹配seq中的字符 |
| [!seq] | 匹配除seq以外的任何字符 |
fnmatch的基本使用
fnmatch这个库相对比较简单,只有4个函数,分别是fnmatch、fnmatchcase、filter和translate,其中最常用的是fnmatch。主要功能如下:
- fnmatch:判断文件名是否符合特定的模式。
- fnmatchcase:判断文件名是否符合特定的模式,区分大小写。
- filter:返回输入列表中,符合特定模式的文件名列表。
- translate:将通配符模式转换成正则表达式。
例子
fnmatch和fnmatchcase用法相同,判断名称是否符合表达式,返回True or False
>>> os.listdir(os.curdir)
['A1.jpg', 'a1.txt', 'a2.txt', 'aA.txt', 'b3.jpg', 'b2.jpg', 'b1.jpg'] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,'*.jpg') ]
['A1.jpg', 'b3.jpg', 'b2.jpg', 'b1.jpg'] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"[ab]*") ]
['a1.txt', 'a2.txt', 'aA.txt', 'b3.jpg', 'b2.jpg', 'b1.jpg'] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"[!a]*") ]
['A1.jpg', 'b3.jpg', 'b2.jpg', 'b1.jpg'] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"b?.jpg") ]
['b3.jpg', 'b2.jpg', 'b1.jpg'] >>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatchcase(name,"A?.jpg") ]
['A1.jpg']
filter和fnmatch类似,只不过filter接受的第一个参数是一个文件名列表,返回符合表达式的列表(即:筛选)
>>> name = os.listdir(os.curdir)
>>> name
['A1.jpg', 'a1.txt', 'a2.txt', 'aA.txt', 'b3.jpg', 'b2.jpg', 'b1.jpg']
>>> fnmatch.filter(name,'*.txt')
['a1.txt', 'a2.txt', 'aA.txt']
>>>
glob模块
我们前面的fnmatch模块,都是利用os.listdir获取文件列表,然后通过字符串fnmatch模块进行文件名匹配的,而在Python中还有更加简单的方式,即使用glob库。
glob的作用就相当于os.listdir 加上 fnmatch。使用glob以后就不用使用os.listdir获取文件列表了。
glob比fnmatch更简单,因为他只有 glob,iglob,escape三个函数。
glob基本使用
glob和iglob的区别在于glob返回的是一个列表,iglob返回的是一个生成器对象
>>> import glob
>>> glob.glob('*.txt')
['a1.txt', 'a2.txt', 'aA.txt'] >>> g = glob.iglob('*.txt') # 使用iglob返回的是一个生成器
>>> g
<generator object _iglob at 0x1050bbba0> >>> list(g)
['a1.txt', 'a2.txt', 'aA.txt']
>>>
PS:glob同样支持通配符和fnmatch相同,这里不在列举,并且在通配符表达式中支持路径
>>> glob.glob('/Users/DahlHin/github/test/*.txt')
['/Users/DahlHin/github/test/a1.txt','/Users/DahlHin/github/test/a2.txt','/Users/DahlHin/github/test/aA.txt']
>>>
【转】Python模块学习 - fnmatch & glob的更多相关文章
- Python模块学习 - fnmatch & glob
介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里 ...
- Python模块学习:glob 文件路径查找
glob模块是最简单的模块之一,内容非常少. 用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多. 查找文件只用到三个匹配符:”*”, “?”, “[]”. ”*”匹配0个或 ...
- 【目录】Python模块学习系列
目录:Python模块学习笔记 1.Python模块学习 - Paramiko - 主机管理 2.Python模块学习 - Fileinput - 读取文件 3.Python模块学习 - Confi ...
- Python模块学习filecmp文件比较
Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...
- python模块学习第 0000 题
将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果: 好可爱>%<! 题目来源:https://github.com/Yixiao ...
- Python模块学习 - openpyxl
openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...
- Python模块学习:logging 日志记录
原文出处: DarkBull 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net ...
- Python模块学习 - openpyxl读写excel
openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...
- 解惑Python模块学习,该如何着手操作...
Python模块 晚上和朋友聊天,说到公司要求精兵计划,全员都要有编程能力.然后C.Java.Python-对于零基础入门的,当然是选择Python的人较多了.可朋友说他只是看了简单的语法,可pyth ...
随机推荐
- 洛谷P1119 灾后重建 Floyd + 离线
https://www.luogu.org/problemnew/show/P1119 真是有故事的一题呢 半年前在宁夏做过一道类似的题,当时因为我的愚昧痛失了金牌. 要是现在去肯定稳稳的过,真是生不 ...
- python类继承的重写和super
给已经存在的类添加新的行为,继承是非常好的实现方式.但是如果要改变行为呢?比如在Python继承扩展内置类,我们的contact类只允许一个名字和一个邮箱,但是如果要对某些人增加电话号码呢?这里可以通 ...
- Intellij Idea识别Java Web项目
使用maven生成一个Java项目,手动添加相应的web目录WEB_INF,web.xml等,此时idea没有自动识别为web项目,此时编辑web.xml文件会出现一些不该出现的错误,需要做的就是让i ...
- 数据预处理:独热编码(One-Hot Encoding)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- linux shell变量的截取
变量的截断,经常用到的是${},##和%%几个特殊符号.假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt ,可以用${ }分别替换得到不同的值: ${file ...
- img标签的onerror事件
#情景分析: 有时,img标签中的src图片加载失败,原来的图片位置会出现一个碎片图标,这样让人很不爽,如何变得美观些呢? #解决方案: 可以借用img标签的onerror事件,img标签支持oner ...
- 网络编程基础【day09】:socket实现文件发送(六)
本节内容 1.概述 2.文件下载实现 3.MD5值校验 一.概述 我们如何利用socket去下载一个文件,整体思路是这样的: 读取文件名 检测文件是否存在 打开文件 检测文件大小 发送文件大小给客户端 ...
- JDBC-Batch 批量执行
JDBC 批处理 SQL 语句 首先在 jdbc 的 url 中加上 rewriteBatchedStatements=true,只有开启了这个 Mysql 才会执行批处理,否则还是一条一条执行 St ...
- Problems found loading plugins: Plugin "GlassFish Integration" was not loaded: required plugin "Java EE: EJB, JPA, Servlets" is disabled.
idea启动报错:并且无法部署web项目 Problems found loading plugins: Plugin "GlassFish Integration" was no ...
- IIS 常见异常及解决办法
Ø 简介 IIS 是我们平常接触比较多的服务端软件,用于站点发布等,本文主要记录 IIS 常见的异常及解决办法.主要包括: 1. Visual Studio 启动 Web 项目提示"无 ...