python使用技巧-查找文件 

作者:zzxiaoma 时间:2021-11-10 18:48:21 

标准库的fnmatch库专门用来进行文件名匹配,支持使用通配符进行字符串匹配。

  • 1、fnmatch:判断文件名是否符合特定的模式;

  • 2、fnmatchcase:判断文件名是否符合特定的模式,不区分大小写;

  • 3、filter:返回输入列表中,符合特定模式的文件名列表;

  • 4、translate:将通配符模式转换成正则表达式。  

fnmatchcase函数与fnmatch函数几乎一样,只是在匹配文件名时会忽略文件名中字母的大小写。  

filter函数与fnmatch函数比较类似,区别在于fnmatch每次对一个文件名进行匹配判断,filter函数每次对一组文件名进行匹配判断。filter 函数接受文件名列表为第一个参数,文件名模式为第二个参数,然后以列表的形式返回输入列表中所有符合模式的文件名。  

import os,fnmatch

names = os.listdir('.')
for name in names:
    if fnmatch.fnmatch(name,'*.xlsx'):
        print(name)
    if fnmatch.fnmatch(name,'[a-z]*'):
        print(name)
print(fnmatch.filter(names,"[a-z]*.xlsx"))

目前,我们要获取特定类型的文件列表,都是先通过os.listdir获取文件列表,然后通过使用fnmatch进行文件名模式匹配进行过滤。而在Python中还有更加简单的方式,即使用标准库的glob库。glob的作用相当于os.listdir加上fnmatch。使用glob以后,不需要调用os.listdir获取文件列表,直接通过模式匹配即可。

import glob

print(glob.glob('*.xlsx'))
print(glob.glob('[a-z]*'))

前面的例子都是查找某一个目录下的文件并通过模式匹配去选择自己需要的文件类型。在实际工作过程中,更有可能遇到的是查找某个目录及其子目录下的所有文件。例如查找某个目录及其子目录下的图片。可以使用os模块的walk函数。walk函数遍历某个目录及其子目录,对于每一个目录,walk返回一个三元组(dirpath, dirnames,filenames)。其中dirpath保存的是当前目录,dirnames是当前目录下的子目录列表,filenames是当前目录下的文件列表。  

import os,fnmatch

images = ['*.jpg','*.jpeg','*.png','*.tif','*.tiff']
matches = []
for dirpath,dirnames,filenames in os.walk(os.path.expanduser(r"D:/test")):
    for image in images:
        for filename in fnmatch.filter(filenames,image):
            matches.append(os.path.join(dirpath,filename))
print(matches)

在遍历目录及其子目录时,如果想要忽略掉某一个子目录,可以直接修改三元组中的dirnames,即从dirnames列表中移除需要忽略掉的目录。

if 'extest' in dirnames:  
    dirnames.remove('extest')

来源:https://blog.51cto.com/u_3764469/5020275

标签:python,查找,文件 
0
投稿

猜你喜欢

  • python linecache读取行更新的实现

    2021-01-26 01:33:06
  • python实现FTP文件传输的方法(服务器端和客户端)

    2021-03-29 23:36:08
  • Python爬虫采集微博视频数据

    2023-08-11 16:01:03
  • Python统计列表中的重复项出现的次数的方法

    2023-10-12 08:06:15
  • python 中[0]*2与0*2的区别说明

    2021-11-01 07:46:17
  • fckeditor 修改记录添加行距功能插件

    2022-04-20 23:05:23
  • Flash在web客户端的潜在问题

    2009-05-20 12:11:00
  • Django中cookie的基本使用方法示例

    2022-08-13 16:49:05
  • 两种php实现图片上传的方法

    2024-05-22 10:06:44
  • 详解重置Django migration的常见方式

    2022-10-30 13:21:17
  • numpy中实现二维数组按照某列、某行排序的方法

    2022-07-16 00:18:03
  • python爬取音频下载的示例代码

    2023-07-25 09:59:57
  • 详解Vue中使用v-for语句抛出错误的解决方案

    2024-04-09 10:44:34
  • 解析SQL server与asp 互操作的时间处理

    2009-02-05 16:13:00
  • MAC下MySQL初始密码忘记怎么办

    2024-01-20 03:54:05
  • pytorch中的inference使用实例

    2023-07-24 16:22:56
  • asp的分词技术

    2007-08-25 17:50:00
  • JupyterLab远程密码访问实现

    2022-06-04 23:52:26
  • python 使用值来排序一个字典的方法

    2022-02-05 00:25:05
  • 详解安装sql2012出现错误could not open key...解决办法

    2024-01-18 09:21:33
  • asp之家 网络编程 m.aspxhome.com