通配查找与迭代
使用 glob 模式查找文件
通配查找与迭代 是 CoddyKit 上的免费 Python Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
查找文件
pathlib 可以轻松列出目录内容,并搜索与模式匹配的文件。关键方法包括 iterdir、glob 和 rglob。
设置示例目录树
为了探索这些方法,我们首先创建一个包含少量文件的目录。此设置只使用标准库。
from pathlib import Path
root = Path('sample')
root.mkdir(exist_ok=True)
(root / 'a.txt').write_text('1')
(root / 'b.txt').write_text('2')
(root / 'c.log').write_text('3')
print('created files')iterdir 列出内容
iterdir() 会直接生成目录中的每个条目,每个条目对应一个 Path。
from pathlib import Path
root = Path('sample')
for entry in sorted(root.iterdir()):
print(entry.name)使用模式进行 glob
glob() 会查找与 shell 风格模式匹配的条目。* 通配符可以匹配任意长度的字符序列。
from pathlib import Path
root = Path('sample')
for txt in sorted(root.glob('*.txt')):
print(txt.name)单字符通配符
? 通配符恰好匹配一个字符,适合查找长度固定的名称。
from pathlib import Path
root = Path('sample')
for m in sorted(root.glob('?.txt')):
print(m.name)字符范围
方括号会匹配集合或范围中的任意一个字符,其行为与 shell 通配模式中的方括号相同。
from pathlib import Path
root = Path('sample')
for m in sorted(root.glob('[ab].txt')):
print(m.name)使用 rglob 递归 glob
rglob() 会搜索一个目录及其所有子目录。它等价于 glob('**/pattern')。
from pathlib import Path
root = Path('sample')
(root / 'nested').mkdir(exist_ok=True)
(root / 'nested' / 'deep.txt').write_text('x')
for m in sorted(root.rglob('*.txt')):
print(m)统计匹配结果
glob 的结果是迭代器。将迭代器传给 list(),即可统计或重复使用匹配结果。
from pathlib import Path
root = Path('sample')
txts = list(root.rglob('*.txt'))
print('found', len(txts), 'text files')迭代时进行筛选
将 glob 操作与 is_file 或 is_dir 检查结合起来,可以精确筛选结果。
from pathlib import Path
root = Path('sample')
files = [p for p in root.iterdir() if p.is_file()]
for f in sorted(files):
print(f.name)处理找到的文件
获得匹配结果后,您就可以读取每个文件。在这里,我们会对目录树中每个文本文件的内容求和。
from pathlib import Path
root = Path('sample')
total = 0
for p in root.rglob('*.txt'):
text = p.read_text().strip()
if text.isdigit():
total += int(text)
print('total:', total)对 glob 结果排序
Glob 不保证任何特定顺序。需要确定性输出时,请将结果传给 sorted(),例如生成报告时。
from pathlib import Path
root = Path('sample')
for p in sorted(root.glob('*'), key=lambda x: x.name):
print(p.name)快速检查
glob 和 rglob 有什么区别?
回顾
您已经学会了使用 glob 模式查找文件。
iterdir列出直接内容。glob匹配模式(*、?、[...])。rglob递归搜索。- 将 glob 操作与
is_file/is_dir筛选结合起来,然后读取匹配的文件。
常见问题解答
「通配查找与迭代」课时是免费的吗?
是的 — 「通配查找与迭代」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「通配查找与迭代」这节课中我会学到什么?
使用 glob 模式查找文件 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「通配查找与迭代」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。