Python正则表达式re模块和os模块实现文件搜索模式匹配
☞ ░ 前往老猿Python博文目录 ░
因测试需要,需要提供一个可以指定目录搜索符合条件的文件名函数,搜索时可以通过*(星号)匹配0-n个字符,?(问号)匹配任意1个字符,可以指定多个文件类型,每个类型采用分号分隔。
下面是利用正则表达式和os模块实现上面功能的一个函数getDirFiles:
def getDirFiles(directory,filenamelike,extnames=None):
'''将文件搜索匹配规则转成正则匹配规则串,主要是*、?和.的处理
*:匹配0或多个字符
?:匹配一个字符
.:文件前缀、后缀分隔符
directory:搜索目录
filenamelike:文件名搜索模式,可以带*和?搜索
extnames:限定文件名后缀范围,不同后缀分号分隔
返回值:符合搜索条件的文件名列表
'''
import os
import re
searchpattern = None
extnamesList = []
def transFileMatchToReMatch(matchinf):
reexprlist = []
for ch in matchinf:
if ch=='.':
reexprlist.append('[.]{1}')
elif ch=='*':
reexprlist.append('(.)*')
elif ch=='?':
reexprlist.append('(.){1}')
else:reexprlist.append(ch)
pattern = ''.join(reexprlist)
searchpat = re.compile(pattern,re.I)
return searchpat
def matchString(pattern,string):#判断指定字符串是否符合搜索
nonlocal searchpattern
if not searchpattern:searchpattern = transFileMatchToReMatch(pattern)
return re.fullmatch(searchpattern,string)
if extnames:
extnamesList = extnames.split(';')
files = os.listdir(directory)
filelist = []
for file in files:
if matchString(filenamelike,file):
if extnames:
filetype = file.rsplit(".",1)[1]
if not filetype:continue
if filetype not in extnamesList:continue
#print(file)
filelist.append(file)
return filelist
测试执行:
>>> getDirFiles(r"f:\video","7*.*","mp4")
['7.mp4', '7.mp4_blurred.mp4']
>>> getDirFiles(r"f:\video","7*.*")
['7.mp4', '7.mp4_blurred.mp4']
>>> getDirFiles(r"f:\video","7*")
['7.mp4', '7.mp4_blurred.mp4', '7月业支会']
>>> getDirFiles(r"f:\video","7*.*","mp?")
[]
>>> getDirFiles(r"f:\video","7*.*","mp3")
[]
>>> getDirFiles(r"f:\video","*.*","mp3")
['audio.mp3']
>>> getDirFiles(r"f:\video","*.txt")
['test.txt', 'track.txt']
>>> getDirFiles(r"f:\video","*.*","txt;mp3")
['audio.mp3', 'test.txt', 'track.txt']
>>>
关于老猿的付费专栏
老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。
收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
跟老猿学Python、学5G!
☞ ░ 前往老猿Python博文目录 ░
Python正则表达式re模块和os模块实现文件搜索模式匹配的更多相关文章
- Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则
时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...
- python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )
1.os模块 2.序列化模块:(1)json模块 和 pickle模块 一.os模块 os.path.abspath: (1)把路径中不符合规范的/改成操作系统默认的格式 import os path ...
- Python(七)之OS模块
文件系统功能:os模块 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令: 目录: os.mkdir('/tmp/ ...
- Python入门-模块2(random模块、os模块)
>>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randint(1,10) #返回1-1 ...
- Python的路径操作(os模块与pathlib模块)
Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...
- (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...
- 常用模块:os模块,logging模块等
一 os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...
- day5模块学习 -- os模块学习
python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...
- 时间模块之datatime模块、os模块、sys模块、json模块、json模块实操
目录 一.模块的绝对导入和相对导入 二.包的概念 三.编程思想的转变 四.软件开发目录规范 五.常见的内置模块 一.时间模块之datatime模块 1.datetime.datetime.today( ...
- 模块之-os模块
模块之-os模块 >>> import os >>> os.getcwd() #获取当前工作目录 'C:\\Users\\Administrator' >&g ...
随机推荐
- OGG投递进程报错无法open文件,无法正常投递
1.1现象 之前有个客户遇到一个问题,OGG同步数据链路,突然有一天网络出现问题,导致OGG投递进程无法正常投递,无法写入目标端的该文件. 猜测是由于网络丢包等原因导致文件损坏,无法正常open,re ...
- C# + Matlab 实现计件工时基于三层BP神经网络的拟合--真实项目
工序工时由该工序的工艺参数决定,有了工时后乘以固定因子就是计件工资.一般参考本地小时工资以及同类小时工资并考虑作业的风险等因素给出固定因子 采用的VS2010 , Matlab2015a 64, 开 ...
- http代理阅读4 响应缓存处理
if (c->read->ready) { ngx_http_upstream_process_header(r, u); //读事件触发 准备处理http头部信息 return; } 向 ...
- centos6 安装 terminator
yum install terminator 报错: No package terminator available. 解决: yum install epel-release 报错 Cannot r ...
- 查询osd上的pg数
本文中的命令的第一版来源于国外的一个博客,后面的版本为我自己修改的版本 查询的命令如下: ceph pg dump | awk ' /^pg_stat/ { col=1; while($col!=&q ...
- 自动化测试_移动端测试(一) ----- Appium环境搭建
一. 安装node.js 因为Appium是使用nodejs实现的,所以node是解释器,首先需要确认安装好 官网下载node.js:https://nodejs.org/en/download/ 安 ...
- [PHP安全特性学习]is_numeric()函数安全漏洞
简介 PHP函数的安全特性-is_numerice() 函数 简介 PHP is_numeric() 函数 is_numeric() 函数用于检测变量是否为数字或数字字符串. 语法: bool is_ ...
- 在CorelDRAW中为对象添加块阴影效果
我们可以使用CorelDRAW来绘制矢量图形,在勾画出简单的图形后,往往还需要对它们进行一些或简单或复杂的处理,以增加一定的艺术效果.CDR中可供选择的效果有很多,作用的对象可以是文字,也可以是图案. ...
- 如何用FL Studio将乐器组合与分层
有过音乐制作经历的小伙伴应该知道,我们在用以FL Studio20为代表的音乐编曲软件制作音乐时,往往需要在同一节奏点添加多种音效,这样可以使音乐听起来更具层次感.正因如此,我们就需要不断添加音符,就 ...
- Jenkins中如何自定义构造结果
jenkis中的触发邮件机制是根据构建成功与否来发邮件,实际上我们在jenkis上定时执行脚本时是需要根据用例的执行结果来触发邮件预警 本文讲叙如何根据用例的执行结果来触发邮件预警 1.在任务配置的b ...