当前位置:首页>python>python中glob() 的返回结果

python中glob() 的返回结果

  • 2026-10-08 12:28:18
python中glob() 的返回结果

python中glob() 的返回结果到底是什么?


代码对比分析

代码 1:直接遍历 glob() 结果

from pathlib import Pathsource_dir = Path("source_dir")for file in source_dir.glob("*"):    print(file)  

输出结果:

source_dir/file1.txtsource_dir/file2.jpgsource_dir/subfolder

代码 2:先赋值再打印

from pathlib import Pathsource_dir = Path("source_dir")files = source_dir.glob("*")print(files)

输出结果:

<generator object Path.glob at 0x...>

核心原因:glob() 返回的是生成器(Generator)

特性
说明
返回类型Path.glob()
 返回的是 生成器对象(generator),不是列表
惰性求值
生成器是惰性计算的,只有遍历时才真正去文件系统查找文件
一次性消费
生成器只能迭代一次,遍历完就耗尽

详细解释

🔍 什么是生成器?

files = source_dir.glob("*")  # 这里只是创建了一个生成器,并没有真正执行文件查找

当你直接 print(files) 时,你打印的是生成器对象本身,而不是它产生的值。

✅ 如何正确获取文件列表?

如果你想看到实际的文件,需要遍历这个生成器:

# 方法 1:直接遍历(代码1的做法)for file in source_dir.glob("*"):    print(file)# 方法 2:转换为列表files = list(source_dir.glob("*"))print(files)  # 输出: [PosixPath('source_dir/file1.txt'), ...] 

Windows 系统 → 显示 WindowsPath(...)

Mac / Linux 系统 → 显示 PosixPath(...)

# 方法 3:使用 * 解包(Python 3)print(*source_dir.glob("*"), sep='\n')

类比理解

想象 glob() 是一个自动售货机:

场景
类比
for file in glob("*")
按按钮,机器逐个吐出商品(遍历)
files = glob("*")
你只是拿到了售货机的遥控器,还没按按钮
print(files)
你展示的是遥控器,不是里面的商品

总结

# ❌ 错误:打印生成器对象本身files = source_dir.glob("*")print(files)  # <generator object ...># ✅ 正确:遍历生成器获取实际文件for file in source_dir.glob("*"):    print(file)  # 实际文件路径

关键结论:Path.glob() 设计为生成器是为了节省内存(处理大量文件时不会一次性加载所有路径),这是 Python 3 的优化设计。

总结

  1. iterdir()、glob()、rglob()全部返回生成器
  2. 直接 print() 只会显示对象,看不到文件
  3. 必须用 for 循环 或 list() 才能拿到文件
  4. 功能区别:当前层 / 当前层过滤 / 递归全目录

最新文章

随机文章