Python学习记录-2(glob.glob用法详解)

Python 标准库 globglob.glob() 用来按“Unix shell 风格”的路径通配符查找文件/目录,返回所有匹配路径的 列表(不是生成器)。
核心要点只有三件事:通配符语法、常见参数、配合 glob/iglob 使用。


1. 通配符语法

通配符 含义 示例
* 任意长度(≥0)字符,不含目录分隔符 / *.py 匹配当前目录下所有 .py 文件
? 单个字符 file?.txtfile1.txt, fileA.txt
[] 字符集或范围 [0-9].log0.log, 9.log
** 递归匹配任意层子目录(需 recursive=True src/**/*.py 匹配 src/ 及其所有子目录下的 .py 文件

2. 函数签名

glob.glob(pathname, *, recursive=False, include_hidden=False)
  • pathname:带通配符的路径字符串(可用原始字符串 r'...' 避免转义问题)。
  • recursive:为 True** 才能递归子目录;默认 False
  • include_hidden(3.11+):是否包含以 . 开头的隐藏文件/目录。
  • 返回值:按字母排序后的 绝对/相对路径列表(空列表表示无匹配)。

3. 常见用法示例

3.1 基础通配

import glob, os

# 当前目录下所有 .txt
txt_files = glob.glob('*.txt')

# 任意一级目录下的 png
pngs = glob.glob('images/*.png')

# 绝对路径写法
logs = glob.glob('/var/log/*.log')

3.2 递归搜索(** + recursive=True

# 整个项目树中所有 Python 文件
py_files = glob.glob('src/**/*.py', recursive=True)

3.3 多段通配 & 字符集

# 匹配 data/2024-07-30.csv、data/2024-07-31.csv ...
today_csv = glob.glob('data/2024-[0-9][0-9]-[0-9][0-9].csv')

3.4 与 os.path / pathlib 配合

from pathlib import Path

for p in map(Path, glob.glob('**/*.py', recursive=True)):
    print(p.name, p.stat().st_size, 'bytes')

3.5 惰性迭代(节省内存)

from glob import iglob          # 返回迭代器
for path in iglob('bigdata/**/*.csv', recursive=True):
    process(path)               # 逐条处理,不会一次性全部读入内存

4. 易踩坑提示

  1. ** 必须配合 recursive=True 才能递归;否则被当成普通 *
  2. Windows 路径分隔符既可写 \ 也可写 /,推荐统一用 / 或原始字符串。
  3. 结果已按文件名字母排序,如需按修改时间排,需再 sorted(..., key=os.path.getmtime)
  4. 隐藏文件(以 . 开头)默认被忽略,除非 include_hidden=True(3.11+)。

posted on 2025-08-05 16:27  奶油阿黄不吃辣  阅读(355)  评论(0)    收藏  举报