1,转载:Python模块学习 - fnmatch & glob - Dahlhin - 博客园 (cnblogs.com)

介绍

  fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库。

fnmatch模块

  大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里介绍标准库fnmatch。这个库专门用来做文件名匹配

fnmatch支持的通配符

  fnmatch支持的通配如下:

通配符      含义     
* 匹配任何数量的字符
匹配单个字符
[seq] 匹配seq中的字符
[!seq] 匹配除seq以外的任何字符

fnmatch的基本使用

  fnmatch这个库相对比较简单,只有4个函数,分别是fnmatch、fnmatchcase、filter和translate,其中最常用的是fnmatch。主要功能如下:

    • fnmatch:判断文件名是否符合特定的模式。
    • fnmatchcase:判断文件名是否符合特定的模式,区分大小写。
    • filter:返回输入列表中,符合特定模式的文件名列表。
    • translate:将通配符模式转换成正则表达式。

例子

  fnmatch和fnmatchcase用法相同,判断名称是否符合表达式,返回True or False

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> os.listdir(os.curdir)
['A1.jpg''a1.txt''a2.txt''aA.txt''b3.jpg''b2.jpg''b1.jpg']
 
>>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,'*.jpg') ]
['A1.jpg''b3.jpg''b2.jpg''b1.jpg']
 
>>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"[ab]*") ]
['a1.txt''a2.txt''aA.txt''b3.jpg''b2.jpg''b1.jpg']
 
>>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"[!a]*") ]
['A1.jpg''b3.jpg''b2.jpg''b1.jpg']
 
>>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatch(name,"b?.jpg") ]
['b3.jpg''b2.jpg''b1.jpg']
 
>>> [ name for name in os.listdir(os.curdir) if fnmatch.fnmatchcase(name,"A?.jpg") ]
['A1.jpg']

  filter和fnmatch类似,只不过filter接受的第一个参数是一个文件名列表,返回符合表达式的列表(即:筛选)

1
2
3
4
5
6
>>> name = os.listdir(os.curdir)
>>> name
['A1.jpg''a1.txt''a2.txt''aA.txt''b3.jpg''b2.jpg''b1.jpg']
>>> fnmatch.filter(name,'*.txt')
['a1.txt''a2.txt''aA.txt']
>>>

glob模块

  我们前面的fnmatch模块,都是利用os.listdir获取文件列表,然后通过字符串fnmatch模块进行文件名匹配的,而在Python中还有更加简单的方式,即使用glob库。

  glob的作用就相当于os.listdir 加上 fnmatch。使用glob以后就不用使用os.listdir获取文件列表了。

  glob比fnmatch更简单,因为他只有 glob,iglob,escape三个函数。

glob基本使用

glob和iglob的区别在于glob返回的是一个列表,iglob返回的是一个生成器对象

1
2
3
4
5
6
7
8
9
10
11
>>> import glob
>>> glob.glob('*.txt')
['a1.txt''a2.txt''aA.txt']
 
>>> g = glob.iglob('*.txt')        # 使用iglob返回的是一个生成器
>>> g
<generator object _iglob at 0x1050bbba0>
 
>>> list(g)
['a1.txt''a2.txt''aA.txt']
>>>

PS:glob同样支持通配符和fnmatch相同,这里不在列举,并且在通配符表达式中支持路径

1
2
3
>>> glob.glob('/Users/DahlHin/github/test/*.txt')
['/Users/DahlHin/github/test/a1.txt','/Users/DahlHin/github/test/a2.txt','/Users/DahlHin/github/test/aA.txt']
>>>
所有巧合的是要么是上天注定要么是一个人偷偷的在努力。
 
2,参考:
 

python fnmatch & glob的更多相关文章

  1. 【转】Python模块学习 - fnmatch & glob

    [转]Python模块学习 - fnmatch & glob 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特 ...

  2. python's fnmatch&glob&os.listdir

    [python's fnmatch&glob&os.listdir] fnmatch: fnmatch只有4种special character,用于提供和shell中一样的文件名的匹 ...

  3. Python:glob

    学习自: (1)Python标准库glob模块_lianghe77的博客-CSDN博客_glob库 (2)Python:glob与os.listdir_鳄鱼的博客-CSDN博客 (3)python文件 ...

  4. Python模块学习 - fnmatch & glob

    介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里 ...

  5. python模块--glob, fnmatch

    包/方法 返回值 参数 说明 glob     Unix shell样式的路径扩展 .glob() list 匹配满足规则的所有路径(默认以 . 开头的文件不会匹配到, 可以用 .* 来匹配) pat ...

  6. os模块、文件压缩 、匹配文件后缀名:fnmatch glob

    一.os模块 os模块:是python是系统交互的模块 import os # 0平台信息的一些操作 python是夸平台的,所以内部兼容了不同的平台 1. os.name # 操作系统 nt是win ...

  7. Python学习-33.Python中glob模块的一些参数

    glob模块中有一个叫glob的方法可以获取某个目录下的文件. import glob temp=glob.glob("E:\\Temp\\*.txt") print(temp) ...

  8. 【python】glob模块、os模块

    http://www.cnblogs.com/hongten/p/hongten_python_glob.html http://wenku.baidu.com/link?url=AgUq9_yQVj ...

  9. 飘逸的python - 实现glob style pattern

    一说起通配符,大家非常快就会想起*和? 号,有了通配符,使得表达能力大大增强,非常多linux命令都支持这个东西,事实上就是glob style pattern. 就连redis的keys命令都支持g ...

随机推荐

  1. 详解Java中==和equals()的区别

    众所周知,在 Java 编程中,程序员通常会使用==或equals()来简单的比较地址,内容是否相等.而这两者之间的使用区别,对于初学 Java 的同学来说可能会比较迷糊.我将根据下面的几段示例程序, ...

  2. logstash-input-jdbc 同时同步多个表的情况

    input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/crm?zeroDateTimeBehavi ...

  3. vmware workstation16许可证密钥

    ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV8FA1M0-89YE3-0 ...

  4. PHP中的日期相关函数(一)

    日期相关的操作函数是我们在日常的工作开发中最常接触到的功能.当然,大部分同学可能最多用到的就是 date() . time() 这两个函数,我们今天先不讲这两个函数,或许后面的文章也不太会讲它们,毕竟 ...

  5. jmeter 脚本录制方式详解

    关于jmeter脚本录制方式,主要分为第三方工具录制.jmeter本身代理方式录制以及人为手写脚本的三种方式.其中第三方工具录制主要有3种主流工具进行录制,badboy   BlazeMeter    ...

  6. linux 客户机挂载vitualbox共享文件夹

    1. 安装增强功能包(Guest Additions) 安装好Ubuntu 9.10后,运行Ubuntu并登录.然后在VirtualBox的菜单里选择"设备(Devices)" - ...

  7. 彻底关闭Windows自动更新

    win+r--输入services.msc(服务管理窗口)停止windows update服务并禁用同时在恢复里,改为无操作 win + r --输入gpedit.msc(本地组策略编辑器)家庭版没有 ...

  8. Vue自定义标签页,并且在其中渲染Echarts图表

    目录 一.需求说明 二.标签页功能实现 一.需求说明 1.点击标签按钮切换不同的echarts图表,考虑用Ant Design Vue,但是其样式无法自定义 2.div的整体布局样式使用tailwin ...

  9. Dapr逐渐被点燃

    Dapr被点燃 Dapr的热度个人认为才刚刚热起来,9月份我写了Dapr + .NET Core实战一共10篇,从基础概念到简单的实战,但是有很多人感兴趣,具体表现在我个人维护的QQ群,人数从80人左 ...

  10. 关于我的Visual Studio2017修改安装重试9次失败问题解决

    环境:windows vs2017 现象描述:本来我的vs可用的,一天想暗爪QT,插件安装好了不能创建QT项目,准备升级,然后问题出现了. 过程: 把人弄崩溃了,二三十k的速度在走,半路又终止.根本不 ...