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中映射类型(字典)操作符的概念和使用
Aug 19 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python深入06——python的内存管理详解
Dec 07 Python
利用python画一颗心的方法示例
Jan 31 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python聊天室程序(基础版)
Apr 01 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
机器学习之KNN算法原理及Python实现方法详解
Jul 09 Python
django Serializer序列化使用方法详解
Oct 16 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
python Pillow图像处理方法汇总
Oct 16 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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模板类代码
2008/09/07 PHP
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
基于Node.js模板引擎教程-jade速学与实战1
2017/09/17 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
python控制台显示时钟的示例
2014/02/24 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python进程池Pool应用实例分析
2019/11/27 Python
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
汽车工程专业应届生求职信
2013/10/19 职场文书
工程总经理工作职责
2013/12/09 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
幼儿园开学寄语
2014/04/03 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
小班上学期个人总结
2015/02/12 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
居委会工作总结2015
2015/05/18 职场文书
运动会新闻报道稿
2015/07/22 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
python 详解turtle画爱心代码
2022/02/15 Python