0Pricing
Python Academy · 课时

通配查找与迭代

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Path 对象
  2. 读取和写入文件
  3. 通配查找与迭代
  4. 路径操作
← 返回 Python Academy