如何生成含层级总大小的指定路径文件及文件夹Python字典
实现带文件夹总大小的目录结构字典
需求说明
需要生成嵌套字典,包含指定路径下所有文件的大小,以及各级文件夹的总大小(即文件夹内所有文件和子文件夹大小之和),格式示例如下:
{ "root": { "folder1": { "file11": 100, "file12": 89, "file13": 32, "size": 221 }, "folder2": { "subfolder21": { "file21": 45, "file22": 80, "size": 125 }, "size": 125 }, "size": 346 } }
当前已生成仅包含文件大小的字典,但无法自动计算并添加各级文件夹的size字段,原有代码通过exec构建字典,不利于后续的大小累加计算。
解决方案
放弃exec的实现方式,改用递归遍历+实时计算的方式,直接构建带文件夹总大小的字典:
完整代码
import os def build_dir_size_dict(path): dir_content = {} total_size = 0 # 遍历当前目录下的所有条目 for entry in os.scandir(path): if entry.is_file(follow_symlinks=False): # 处理文件:记录大小并累加到总size file_size = entry.stat().st_size dir_content[entry.name] = file_size total_size += file_size elif entry.is_dir(follow_symlinks=False): # 处理文件夹:递归构建子目录字典,获取子目录总大小 sub_dir, sub_total = build_dir_size_dict(entry.path) dir_content[entry.name] = sub_dir total_size += sub_total # 添加当前目录的总size字段 dir_content["size"] = total_size return dir_content, total_size # 使用示例 target_root = "/path/to/your/target/directory" # 获取目录结构字典和根目录总大小(第二个返回值可忽略) dir_dict, _ = build_dir_size_dict(target_root) # 将根目录名作为顶层键,匹配需求格式 final_result = {os.path.basename(target_root): dir_dict} # 格式化打印结果 import json print(json.dumps(final_result, indent=4))
代码说明
- 高效遍历:用
os.scandir替代os.listdir,无需额外调用os.path判断文件类型,性能更优 - 递归构建:每个目录递归处理子目录,同时返回当前目录的内容字典和总大小
- 实时累加:文件大小直接累加到当前目录总size,子目录的总size也会同步累加
- 格式匹配:最后将根目录名作为顶层键,完全符合需求中的字典结构
输出验证
运行代码后,会生成和需求示例一致的字典结构,每个文件夹下的size字段自动计算为内部所有内容的大小总和。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

