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的Flask框架与数据库连接的教程
Apr 20 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
Python实现二维数组输出为图片
Apr 03 Python
python 执行文件时额外参数获取的实例
Dec 18 Python
Python编程深度学习计算库之numpy
Dec 28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
Python实现一个论文下载器的过程
Jan 18 Python
利用Opencv实现图片的油画特效实例
Feb 28 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 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使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
js 如何实现对数据库的增删改查
2012/11/23 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
javascript数组遍历for与for in区别详解
2014/12/04 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
Python常见数据结构详解
2014/07/24 Python
详解Python多线程
2016/11/14 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
美国性感女装网站:bebe
2017/03/04 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
this关键字的作用
2016/01/30 面试题
会计学应届毕业生推荐信
2013/11/04 职场文书
师说教学反思
2014/02/07 职场文书
给校长的建议书500字
2014/05/15 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
详解Java实践之适配器模式
2021/06/18 Java/Android