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编写Linux系统守护进程实例
Feb 03 Python
Python实现Linux的find命令实例分享
Jun 04 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
使用python为mysql实现restful接口
Jan 05 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
python使用minimax算法实现五子棋
Jul 29 Python
pandas DataFrame行或列的删除方法的实现示例
Aug 02 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python descriptor(描述符)的实现
Nov 15 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
Django中template for如何使用方法
Jan 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
2015/07/01 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
Ext JS动态加载JavaScript创建窗体的方法
2016/06/23 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
通过实例解析json与jsonp原理及使用方法
2020/09/27 Javascript
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
详解Python pygame安装过程笔记
2017/06/05 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python如何使用腾讯云发送短信
2020/09/17 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
小学庆六一活动方案
2014/02/28 职场文书
学生操行评语大全
2014/04/24 职场文书
平安校园建设方案
2014/05/02 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
二手车转让协议书
2015/01/29 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书