如何在Python中使用rglob()搜索文件时显示计数或进度?
使用Rich实现JSON文件搜索的进度显示
方案一:实时计数器(显示已找到文件数)
利用rglob()的生成器特性,遍历过程中实时更新计数,用Rich的Console避免刷屏:
from pathlib import Path from rich.console import Console console = Console() count = 0 files = [] # 用expanduser解析~路径 for file in Path("~/foo/bar/").expanduser().rglob("*.json"): files.append(file) count += 1 # \r 回到行首覆盖原有内容,实现实时更新 console.print(f"\r已找到 {count} 个JSON文件", end="") console.print(f"\n搜索完成,共找到 {count} 个JSON文件")
方案二:预估进度条(基于已知总数)
已知文件总数约28k,用Rich的Progress组件实现带预估的进度条,后续总数增长时只需调整预估数值:
from pathlib import Path from rich.progress import Progress # 预估总文件数,可根据实际增长情况调整 ESTIMATED_TOTAL = 28000 files = [] with Progress() as progress: # 创建进度任务,设置描述和总进度 search_task = progress.add_task("[green]正在搜索JSON文件...", total=ESTIMATED_TOTAL) for file in Path("~/foo/bar/").expanduser().rglob("*.json"): files.append(file) # 每找到一个文件,进度+1 progress.update(search_task, advance=1) # 搜索结束后,更新进度为实际找到的数量,确保进度条显示完整 progress.update(search_task, completed=len(files), description="[green]搜索完成!") print(f"最终找到 {len(files)} 个JSON文件")
注意事项
- 必须用
expanduser()解析~路径,否则Path无法正确识别用户目录 - 若后续文件总数增长明显,直接修改
ESTIMATED_TOTAL为更接近的预估数值即可 - 两个方案都避免了直接转
list()导致的一次性加载,边遍历边统计更高效
内容的提问来源于stack exchange,提问作者hobbes3
相关产品推荐
相关产品推荐

