Python之glob模块的使用

本文介绍了Python内置的glob模块,包括通配符的使用(*、**、?、[]),glob.glob()和glob.iglob()函数的功能,以及如何在不同场景下匹配文件名、后缀和目录。通过实例演示了如何利用这些功能进行文件查找和递归搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👋 简介

glob是python中的内置模块,该模块主要是用来查找文件与目录的。glob模块是按照 Unix shell 所使用的规则找出所有匹配特定模式的路径名称。我们只需要了解该模块的匹配规则与常用函数,就会使文件查找,路径匹配变得非常快捷简单。

💡 正文

1 glob模块介绍

1.1 通配符
  • *:匹配0个或多个字符;

  • **:匹配所有文件、目录、子目录和子目录里的文件(3.5版本新增);

  • ?:代匹配一个字符;

  • []:匹配指定范围内的字符,如[0-9]匹配数字,[a-z]匹配小写字母;

1.2 方法
  • glob.glob():返回符合匹配条件的所有文件的路径;

  • glob.iglob():返回一个迭代器对象,需要循环遍历获取每个元素,得到的也是符合匹配条件的所有文件的路径;

  • glob.escape():escape可以忽略所有的特殊字符,就是星号、问号、中括号;

备注:recursive=False:代表递归调用,与特殊通配符“**”一同使用,默认为False,False表示不递归调用,True表示递归调用;

1.3 测试文件准备

D:\picture D:\picture\L1 D:\picture\L1\L2 三层目录,每个文件夹中都有4个文件,其中3个.jpg,1个.png

2 glob函数的使用

2.1 glob()函数

该方法返回一个list

import glob

path = r'D:\picture\*.jpg'
files = glob.glob(path)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
2.2 iglob()函数

使用该函数,可以生产一个迭代器

path = r'D:\picture\*.jpg'

files = glob.iglob(path)
for file in files:
    print(file)

# D:\picture\img1.jpg
# D:\picture\img2.jpg
# D:\picture\img3.jpg

3 通配符是使用

3.1 找出后缀为.jpg的文件

D:\picture\*.jpg:匹配当前目录下文件后缀名为jpg的文件

import glob

path = r'D:\picture\*.jpg'
files = glob.glob(path)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
3.2 匹配文件名包含m的文件

D:\picture\*m* :匹配出当前目录下文件名及后缀名都含有m的文件

path = r'D:\picture\*m*'
files = glob.glob(path)
print(files)

# ['D:\\picture\\a.md', 'D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\img4.png', 'D:\\picture\\maven.txt']
3.3 匹配以img开头的文件

D:\picture\img?.jpg:匹配出当前目录下以img开头的文件(?只能匹配一个字符)

path = r'D:\picture\img?.jpg'
files = glob.glob(path)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']

D:\picture\img*.jpg:匹配出当前目录下以img开头的文件(*可以匹配一个活多个字符)

path = r'D:\picture\img*.jpg'
files = glob.glob(path)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg']
3.4 匹配当前目录文件名包含数字的文件

D:\picture\*[0-9]*.*:匹配当前目录下所有文件名包含数字的所有文件

path = r'D:\picture\*[0-9]*.*'
files = glob.glob(path)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\img4.png']

备注:

  • 如果规则写成*[0-9]*,则同时会匹配到满足要求的目录

  • 如果规则写成*[!5-9]*,则满足5-9的不会匹配,会把0-4的匹配出来

3.5 匹配当前目录下后缀为jpg的文件,包括子目录

D:\picture\**\*.jpg:匹配后缀为jpg的文件,包括子目录中的同样进行匹配

path = r'D:\picture\**\*.jpg'
files = glob.glob(path, recursive=True)
print(files)

# ['D:\\picture\\img1.jpg', 'D:\\picture\\img123.jpg', 'D:\\picture\\img2.jpg', 'D:\\picture\\img3.jpg', 'D:\\picture\\L1\\img1.jpg', 'D:\\picture\\L1\\img2.jpg', 'D:\\picture\\L1\\img3.jpg', 'D:\\picture\\L1\\L2\\img1.jpg', 'D:\\picture\\L1\\L2\\img2.jpg', 'D:\\picture\\L1\\L2\\img3.jpg']

备注:recursive=True,参数必填,若不为True,则只会获取每层目录第一个文件,匹配不到所有文件

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
03-19
### Glob 模式匹配简介 Glob 是一种用于文件名模式匹配的技术,广泛应用于 UNIX 和类 UNIX 系统中。它的核心功能是对一组特定的字符串(通常是文件路径)进行筛选和过滤[^3]。 #### 特殊字符及其含义 以下是 glob 模式的常见特殊字符以及它们的功能: - `*`:匹配任意长度的字符序列(可以为空)。例如,在路径 `/home/user/*.txt` 中,`*.txt` 表示当前目录下所有以 `.txt` 结尾的文件[^2]。 - `?`:匹配单个字符。例如,`file?.txt` 可能匹配到 `file1.txt` 或者 `fileA.txt`,但不会匹配到 `fileAB.txt`。 - `[ ]`:定义一个字符集合或范围。例如,`[abc].txt` 匹配名为 `a.txt`, `b.txt`, 或 `c.txt` 的文件;而 `[0-9].txt` 则表示匹配任何由数字命名并以 `.txt` 结尾的文件[^1]。 - `{ }`:允许指定多个选项之一作为匹配条件。例如,`{foo,bar}.py` 能够找到名称为 `foo.py` 或者 `bar.py` 的 Python 文件。 需要注意的是,尽管这些符号看起来像正则表达式的一部分,但实际上 **glob 并不完全等于正则表达式**,其语法更加简化且专注于路径处理。 --- ### Python 中如何使用 Glob 进行文件查找? Python 提供了一个内置的标准库叫做 `glob` 来支持基于上述规则的操作。下面是一些基本用法的例子: #### 示例代码展示 ```python import glob # 查找当前工作目录下的所有 .txt 文件 for txt_file in glob.glob("*.txt"): print(txt_file) # 支持递归搜索子目录 (需注意版本兼容性 >= Python 3.5) for py_file in glob.glob("**/*.py", recursive=True): print(py_file) # 使用方括号限定具体字母或数字集合作为前缀 filtered_files = glob.glob("[ab]*") # 找出名字开头是 'a' 或 'b' 的所有项目 print(filtered_files) ``` 以上脚本展示了三种不同类型的查询方式——简单扩展名匹配、跨层次结构检索以及通过设定首字母约束缩小目标群体规模。 --- ### 实际应用场景举例 假设有一个需求是要备份某个目录里所有的图片资源至另一位置,则可利用如下命令完成自动化迁移过程: ```bash cp /source/path/{*.jpg,*.png} /destination/folder/ ``` 这里的大括号展开机制使得一次调用即可覆盖多种可能的情况而不必分开执行多次复制动作。 另外,在 Git 工作流当中也非常普遍见到类似的忽略策略配置文档(.gitignore),其中每条记录都采用的就是这样的语法规约来声明哪些部分应该被排除在外不做跟踪管理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值