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进程间通信用法实例
Jun 04 Python
启动targetcli时遇到错误解决办法
Oct 26 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
Jun 01 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
Python文件操作基础流程解析
Mar 19 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
Js控制滑轮左右滑动实例
2015/02/13 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
ES6下子组件调用父组件的方法(推荐)
2018/02/23 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
python实现将文本转换成语音的方法
2015/05/28 Python
详解Django中的过滤器
2015/07/16 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
Python之pymysql的使用小结
2019/07/01 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
python pip如何手动安装二进制包
2020/09/30 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
公司部门司机岗位职责
2014/01/03 职场文书
自考生自我评价分享
2014/01/18 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
主持稿开场白
2015/06/01 职场文书
春风化雨观后感
2015/06/11 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
python 详解turtle画爱心代码
2022/02/15 Python