Python3标准库glob文件名模式匹配的问题


Posted in Python onMarch 13, 2020

1. glob文件名模式匹配

尽管glob API很小,但这个模块的功能却很强大。只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可以使用这个模块。要创建一个文件名列表,要求其中各个文件名都有某个特定的扩展名、前缀或者中间都有某个共同的字符串,就可以使用glob而不用编写定制代码来扫描目录内容。

glob的模式规则与re模块使用的正则表达式并不相同。实际上,glob的模式遵循标准UNIX路径扩展规则。只使用几个特殊字符来实现两个不同的通配符和字符区间。模式规则应用于文件名中的段(在路径分隔符/处截止)。

1.1 实例数据

本节中的示例假定当前工作目录中存在以下测试文件。

test_files
test_files/file.txt
test_files/file1.txt
test_files/file2.txt
test_files/filea.txt
test_files/fileb.txt
test_files/subfiles
test_files/subfiles/subfile.txt

如果这些文件不存在,请glob_maketestdata.py在运行以下示例之前使用示例代码创建它们。

Python3标准库glob文件名模式匹配的问题

1.2 通配符

星号(*)匹配一个文件名段中的0个或多个字符。例如,test_files/*。

import glob
for name in sorted(glob.glob('test_files/*')):
  print(name)

这个模式会匹配目录test_files中的所有路径名(文件或目录),但不会进一步递归搜索到子目录。glob()返回的数据不会排序,所以这里的实例会进行排序以便研究结果。

Python3标准库glob文件名模式匹配的问题

要列出子目录中的文件,必须把子目录包含在模式中。

import glob
print('Named explicitly:')
for name in sorted(glob.glob('test_files/subfiles/*')):
  print(' {}'.format(name))
print('Named with wildcard:')
for name in sorted(glob.glob('test_files/*/*')):
  print(' {}'.format(name))

前面显示的第一种情况显式列出了子目录名,第二种情况则依赖一个通配符来查找目录。

Python3标准库glob文件名模式匹配的问题

在这里,两种做法的结果是一样的。如果还有另一个子目录,则通配符会匹配这两个子目录,并且两个子目录中的文件名都会出现在结果中。

1.3 单字符通配符

问号(?)也是一个通配符。它会匹配文件名中该位置的单个字符。

import glob
for name in sorted(glob.glob('test_files/file?.txt')):
  print(name)

前面的例子会匹配以file开头,然后是另外一个任意字符,最后以.txt结尾的所有文件名。

Python3标准库glob文件名模式匹配的问题

1.4 字符区间

如果使用字符区间([a-z])而不是问号,则可以匹配多个字符中的一个字符。下面这个例子会查找名字中扩展名前有一个数字的所有文件。

import glob
for name in sorted(glob.glob('test_files/*[0-9].*')):
  print(name)

字符区间[0-9]会匹配所有单个数字。区间根据各字母/数字的字符码排序,短横线指示连续字符组成的一个不间断区间。这个区间值也可以写为[0123456789]。

Python3标准库glob文件名模式匹配的问题

1.5 转义元字符

有时有必要搜索名字中包含一些特殊元字符的文件,glob使用这些特殊元字符表示模式。escape()函数会建立一个适合的模式,其中的特殊字符会被“转义”,使它们不会被glob扩展或解释为特殊字符。

import glob
specials = '?*['
for char in specials:
  pattern = 'test_files/*' + glob.escape(char) + '.txt'
  print('Searching for: {!r}'.format(pattern))
  for name in sorted(glob.glob(pattern)):
    print(name)
  print()

可以通过构建一个包含单个元素的字符区间来转义各个特殊字符。

Python3标准库glob文件名模式匹配的问题

总结

到此这篇关于Python3标准库glob文件名模式匹配的问题的文章就介绍到这了,更多相关python glob 文件名匹配内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python中的条件判断语句
May 14 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
Nov 19 Python
python Opencv将图片转为字符画
Feb 19 Python
解决pycharm安装后代码区不能编辑的问题
Oct 28 Python
总结Python图形用户界面和游戏开发知识点
May 22 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
Python基于Tkinter编写crc校验工具
May 06 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
python 如何快速复制序列
Sep 07 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
python编写俄罗斯方块
Mar 13 #Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 #Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 #Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 #Python
python实现俄罗斯方块游戏(改进版)
Mar 13 #Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 #Python
Tensorflow中的dropout的使用方法
Mar 13 #Python
You might like
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
浅析JavaScript中的隐式类型转换
2013/12/05 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
JavaScript字符串对象replace方法实例(用于字符串替换或正则替换)
2014/10/16 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
Python 装饰器深入理解
2017/03/16 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python编写分类决策树的代码
2017/12/21 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
深入解析python中的实例方法、类方法和静态方法
2019/03/11 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
python集合的新增元素方法整理
2020/12/07 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
新三好学生主要事迹
2014/01/23 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
MySQL数据库 任意ip连接方法
2022/05/20 MySQL
MySQL深分页问题解决思路
2022/12/24 MySQL