Python3标准库glob文件名模式匹配的问题
作者:爱编程的小灰灰 发布时间:2021-08-29 14:00:23
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在运行以下示例之前使用示例代码创建它们。
1.2 通配符
星号(*)匹配一个文件名段中的0个或多个字符。例如,test_files/*。
import glob
for name in sorted(glob.glob('test_files/*')):
print(name)
这个模式会匹配目录test_files中的所有路径名(文件或目录),但不会进一步递归搜索到子目录。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))
前面显示的第一种情况显式列出了子目录名,第二种情况则依赖一个通配符来查找目录。
在这里,两种做法的结果是一样的。如果还有另一个子目录,则通配符会匹配这两个子目录,并且两个子目录中的文件名都会出现在结果中。
1.3 单字符通配符
问号(?)也是一个通配符。它会匹配文件名中该位置的单个字符。
import glob
for name in sorted(glob.glob('test_files/file?.txt')):
print(name)
前面的例子会匹配以file开头,然后是另外一个任意字符,最后以.txt结尾的所有文件名。
1.4 字符区间
如果使用字符区间([a-z])而不是问号,则可以匹配多个字符中的一个字符。下面这个例子会查找名字中扩展名前有一个数字的所有文件。
import glob
for name in sorted(glob.glob('test_files/*[0-9].*')):
print(name)
字符区间[0-9]会匹配所有单个数字。区间根据各字母/数字的字符码排序,短横线指示连续字符组成的一个不间断区间。这个区间值也可以写为[0123456789]。
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()
可以通过构建一个包含单个元素的字符区间来转义各个特殊字符。
来源:https://www.cnblogs.com/liuhui0308/archive/2020/03/13/12458860.html


猜你喜欢
- python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http
- //1、运行到C盘根目录 //2、输入:SET ORACLE_SID = 你的SID名称 3、输入:sqlplus/nolog 4、输入:c
- 本文为大家分享了python利用高阶函数实现剪枝函数的具体代码,供大家参考,具体内容如下案例:  
- 我就废话不多说,直接上代码吧:# -*- coding: utf-8 -*-import osout=os.system('nets
- Css3引入了新的盒模型——弹性盒模型,该模型决定一个盒子在其他盒子中的分布方式以及如何处理可用的空间。这与XUL(火狐使用的用户交互语言)
- PWA初次体验前言:本示例不用安装任何东西部分资源来自网络资源及PWA官网,不要把PWA想象的太复杂,跟着示例走一下,你行的。PWA介绍一个
- 首先需要安装chardet库,有很多方式,我才用的是比较笨的方式:sudo pip install chardet#!/usr/bin/en
- 在网上有很多文章介绍数据库优化知识,但是大部份文章只是对某个一个方面进行说明,而对于我们程序员来说这种介绍并不能很好的掌握优化知识,因为很多
- 完整项目地址下载:https://github.com/rainbow-tan/rainbow/tree/master/%E8%A3%81%
- 描述:让Len,Left,Right函数识别中文;对中文识别为两个字符,ASCII码为一个;可用此函数代替Len,Left,Right函数。
- 我们在数据处理,往往不小心,pandas会“主动”加上行和列的名称,我现在就遇到了这个问题。这个是pandas中to_csv生成的数据各种拼
- 本文实例讲述了Python简单网络编程。分享给大家供大家参考,具体如下:内容目录1. 客户端(client.py)2. 服务端(server
- 前言django是python语言的一个web框架,功能强大。配合一些插件可为web网站很方便地添加搜索功能。搜索引擎使用whoosh,是一
- 用python另一个抢票神器,你get到了吗?2017年时间飞逝,转眼间距离2018年春节还有不到1个月的时间,还在为抢不到火车票发愁吗?作
- 前言图像分割是许多计算机视觉应用中的关键处理步骤,通常用于将图像划分为不同的区域,这些区域常常对应于真实世界的对象。因此,图像分割是图像识别
- 在实际的项目中,我们一般都会建立三个环境:开发、测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创
- <script> function window.onload(){ if(location.href.indexOf('
- 现状≠将来?程序员做设计本身就很悲哀,纠结于客户与坚持之间就更是如此。无论我今后的路会怎么走,我想始终不变的事情就是与客户博弈了。无论是放弃
- 前言随着人工智能的不断发展,各种智能算法越来越普遍,本文就给大家介绍一种通过训练好的算法进行文字识别的方法,而且是Web页面可视化操作,方便
- Git 服务器搭建上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费