前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python glob 模块全解析:轻松处理文件路径匹配

Python glob 模块全解析:轻松处理文件路径匹配

作者头像
不止于python
发布2025-03-17 16:18:54
发布2025-03-17 16:18:54
15000
代码可运行
举报
文章被收录于专栏:不止于python不止于python
运行总次数:0
代码可运行

上课

在 Python 中,glob 模块 主要用于 查找符合特定规则的文件路径,它支持使用通配符(如 *?[])来进行灵活的文件搜索。相比于 os.listdir()glob 更适合按模式匹配文件,非常适用于批量处理文件。

在这篇文章中,我们将详细讲解 glob 模块的用法,并提供多个示例,帮助你在实际开发中轻松使用它!

glob 模块的基础用法

glob.glob():获取匹配的文件路径列表

glob.glob(pattern, recursive=False) 用于查找所有符合 pattern 规则的文件,并返回一个文件路径列表

  • pattern:搜索的文件模式,如 "*.txt" 代表所有 .txt 文件。
  • recursive:是否递归搜索子目录(默认 False,即只匹配当前目录)。
示例:匹配当前目录下的所有 .txt 文件
代码语言:javascript
代码运行次数:0
运行
复制
import glob

files = glob.glob("*.txt")  # 匹配当前目录下所有 .txt 文件
print(files)

输出示例

代码语言:javascript
代码运行次数:0
运行
复制
['test1.txt', 'notes.txt', 'data.txt']

glob.glob() 递归匹配子目录

如果想要在所有子目录中查找 .txt 文件,需要将 recursive=True 并使用 ** 通配符:

代码语言:javascript
代码运行次数:0
运行
复制
files = glob.glob("**/*.txt", recursive=True)
print(files)

这个方法可以搜索当前目录及其所有子目录.txt 文件,非常适合查找多个层级的文件。


glob.iglob():高效的迭代器方式

glob.iglob(pattern, recursive=False)glob.glob() 类似,但它不会一次性返回整个列表,而是返回一个迭代器,在需要时才生成文件名,节省内存。

示例:使用 iglob() 遍历匹配的文件

代码语言:javascript
代码运行次数:0
运行
复制
for file in glob.iglob("*.txt"):
    print(file)

如果你需要处理大量文件,建议使用 iglob(),避免占用过多内存。

通配符规则

通配符

含义

*

匹配任意数量的字符(包括空字符)

?

匹配任意一个字符

[ ]

匹配指定范围内的字符

示例:使用不同的通配符进行匹配

代码语言:javascript
代码运行次数:0
运行
复制
print(glob.glob("*.py"))     # 匹配当前目录下所有 .py 文件
print(glob.glob("data?.csv")) # 匹配 data1.csv、data2.csv,但不匹配 data10.csv
print(glob.glob("[a-c]*.txt")) # 匹配以 a、b 或 c 开头的 .txt 文件

pathlib vs glob

如果你使用的是 pathlib,也可以使用 Path.glob() 方法,它的功能与 glob.glob() 类似,但更符合面向对象的风格:

代码语言:javascript
代码运行次数:0
运行
复制
from pathlib import Path

path = Path(".")
files = list(path.glob("*.txt"))  # 获取所有 .txt 文件
print(files)

对于递归匹配,可以使用 rglob() 方法:

代码语言:javascript
代码运行次数:0
运行
复制
files = list(path.rglob("*.txt"))  # 在所有子目录中查找 .txt 文件
print(files)

glob 的实际应用案例

批量重命名文件

如果你有多个 .jpg 图片需要改名,可以结合 os.rename()glob 进行批量处理:

代码语言:javascript
代码运行次数:0
运行
复制
import glob
import os

for idx, file in enumerate(glob.glob("images/*.jpg")):
    new_name = f"images/image_{idx}.jpg"
    os.rename(file, new_name)
    print(f"重命名 {file} -> {new_name}")

统计某类型文件的数量

如果你需要统计 .log 日志文件的数量,可以这样做:

代码语言:javascript
代码运行次数:0
运行
复制
log_files = glob.glob("logs/*.log")
print(f"日志文件数量:{len(log_files)}")

读取多个 CSV 文件并合并

如果你有多个 CSV 文件需要合并成一个 Pandas 数据框,可以使用 glob 进行匹配:

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd

csv_files = glob.glob("data/*.csv")
df_list = [pd.read_csv(file) for file in csv_files]  # 读取所有 CSV
df = pd.concat(df_list, ignore_index=True)  # 合并
print(df.head())

glob vs os.listdir()

方法

适用场景

是否支持通配符

是否支持递归

os.listdir()

获取目录下所有文件

glob.glob()

按模式匹配文件

✅(使用 recursive=True)

pathlib.Path.glob()

现代方式的文件匹配

✅(使用 rglob())

如果只想获取所有文件os.listdir() 可能更简单;但如果需要按规则匹配glob 更合适!

下课

🔹 glob 是一个强大的文件路径匹配工具,支持 *? 等通配符,能快速找到符合条件的文件。 🔹 glob.glob() 适合一次性获取文件列表glob.iglob() 则更节省内存。 🔹 pathlib 也提供了 glob()rglob(),更加符合现代 Python 风格。 🔹 glob批量重命名、文件统计、数据处理等任务中非常有用!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上课
  • glob 模块的基础用法
    • glob.glob():获取匹配的文件路径列表
      • 示例:匹配当前目录下的所有 .txt 文件
    • glob.glob() 递归匹配子目录
  • glob.iglob():高效的迭代器方式
    • 示例:使用 iglob() 遍历匹配的文件
  • 通配符规则
    • 示例:使用不同的通配符进行匹配
  • pathlib vs glob
  • glob 的实际应用案例
    • 批量重命名文件
    • 统计某类型文件的数量
    • 读取多个 CSV 文件并合并
  • glob vs os.listdir()
  • 下课
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档