☞ ░ 前往老猿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模块实现文件搜索模式匹配的更多相关文章

  1. Python 自学基础(四)——time模块,random模块,sys模块,os模块,loggin模块,json模块,hashlib模块,configparser模块,pickle模块,正则

    时间模块 import time print(time.time()) # 当前时间戳 # time.sleep(1) # 时间延迟1秒 print(time.clock()) # CPU执行时间 p ...

  2. python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )

    1.os模块 2.序列化模块:(1)json模块 和 pickle模块 一.os模块 os.path.abspath: (1)把路径中不符合规范的/改成操作系统默认的格式 import os path ...

  3. Python(七)之OS模块

    文件系统功能:os模块 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令: 目录: os.mkdir('/tmp/ ...

  4. Python入门-模块2(random模块、os模块)

    >>> random.randomrange(1,10) #返回1-10之间的一个随机数,不包括10 >>> random.randint(1,10) #返回1-1 ...

  5. Python的路径操作(os模块与pathlib模块)

    Python的路径操作(os模块与pathlib模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.os.path模块(Python 3.4版本之前推荐使用该模块) #!/u ...

  6. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  7. 常用模块:os模块,logging模块等

    一    os模块 那么作为一个常用模块,os模块是与操作系统交互的一个模块. 那么os模块中我们常用的一般有以下几种: os.listdir('dirname') 以列表的形式列出指定目录下的所有文 ...

  8. day5模块学习 -- os模块学习

    python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...

  9. 时间模块之datatime模块、os模块、sys模块、json模块、json模块实操

    目录 一.模块的绝对导入和相对导入 二.包的概念 三.编程思想的转变 四.软件开发目录规范 五.常见的内置模块 一.时间模块之datatime模块 1.datetime.datetime.today( ...

  10. 模块之-os模块

    模块之-os模块 >>> import os >>> os.getcwd() #获取当前工作目录 'C:\\Users\\Administrator' >&g ...

随机推荐

  1. 实用fork/join框架提升程序效率

    实用fork/join框架提成程序效率 原文地址:https://www.jianshu.com/p/9ce243796d4a 业务场景 最近再做一个接口,我是一个中央的消息接受方,当我接受到消息后要 ...

  2. Java_静态代理与Lambda

    静态代理 要点: 公共接口 真实角色 代理角色 public class StaticProxy { public static void main(String[] args) { You you ...

  3. 鸿蒙系统应用开发之JS实现一个简单的List

    在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld. 今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个 ...

  4. php post请求https

    <?php $url = 'https://www.xxx.com'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); c ...

  5. Spider_基础总结2_Requests异常

    # 1: BeautifulSoup的基本使用: import requests from bs4 import BeautifulSoup html=requests.get('https://ww ...

  6. python 与 百度人脸识别api

    用python来做人脸识别代码量少 思路清晰, 在使用之前我们需要在我们的配置的编译器中通过pip       install baidu-aip  即可 from aip import AipFac ...

  7. 慢话crush-各种crush组合

    前言 ceph已经是一个比较成熟的开源的分布式存储了,从功能角度上来说,目前的功能基本能够覆盖大部分场景,而社区的工作基本上是在加入企业级的功能和易用性还有性能等方面在发力在,不管你是新手还是老手,都 ...

  8. 配置Ceph的IPV6集群

    前言 对于IPV6实在是非常的陌生,所以本篇开始会讲一下最基本的网络配置,首先让网络能通起来,最开始就是因为不熟悉IPV6,而直接使用了link local地址,造成了mon部署的时候进程无法绑定到I ...

  9. Python_Python处理JSON文件

    # Python处理Json对象 # Python处理Json对象 ''' json.loads() 将JSON字符串转为Python对象 json.dumps() 将Python对象转为JSON字符 ...

  10. 单核cpu多线程有必要吗?

    问题分析 现代计算机一般都是多核cpu,多线程的可以大大提高效率,但是可能会有疑问,那单核CPU使用多线程是不是没有必要了,假定一种情况,web应用服务器,单核CPU.单线程,用户发过来请求,单个线程 ...