Python 如何递归统计指定目录下的文件和文件夹总数量
统计指定目录文件与文件夹总数的实现方案
首先纠正你对os.walk()的认知误区:它本身支持递归遍历所有层级的子目录,你之前只能统计根目录内容属于用法错误。下面给你两种不需要额外创建全量列表、内存占用极低的高效实现方案:
方案1:使用os.walk实现
不需要存储所有路径,每次迭代直接累加当前层级的目录、文件数量即可,大目录下性能表现优异:
import os def count_by_oswalk(src: str) -> tuple[int, int]: dir_count = 0 file_count = 0 for root, dirs, files in os.walk(src): dir_count += len(dirs) file_count += len(files) # 返回值顺序:总文件夹数、总文件数 return dir_count, file_count
方案2:使用pathlib实现
仅遍历一次路径迭代器即可完成计数,完全不需要创建列表存储所有路径对象,代码可读性更高,符合现代Python编码习惯:
from pathlib import Path def count_by_pathlib(src: str) -> tuple[int, int]: dir_count = 0 file_count = 0 # **/* 表示递归匹配所有子层级的路径,返回的是迭代器不会预加载全量数据 for p in Path(src).glob("**/*"): if p.is_dir(): dir_count += 1 else: file_count += 1 return dir_count, file_count
补充用法说明
- 如果只需要统计所有路径的总数量,不需要区分文件和文件夹,一行代码即可实现:
total = sum(1 for _ in Path(src).glob("**/*")) - 如果你需要过滤隐藏文件/文件夹,在判断条件中补充
not p.name.startswith(".")即可 - 两者性能差异极小,Windows系统下大目录遍历
os.walk速度稍快,跨平台场景下pathlib的写法兼容性更强
内容的提问来源于stack exchange,提问作者uriandwubber
相关产品推荐
相关产品推荐

