python中glob() 的返回结果到底是什么?
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/subfolderfrom pathlib import Pathsource_dir = Path("source_dir")files = source_dir.glob("*")print(files)输出结果:
<generator object Path.glob at 0x...>glob() 返回的是生成器(Generator)| 返回类型 | Path.glob() |
| 惰性求值 | |
| 一次性消费 |
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 的优化设计。
iterdir()、glob()、rglob()全部返回生成器print() 只会显示对象,看不到文件for 循环 或 list() 才能拿到文件