You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成含层级总大小的指定路径文件及文件夹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))

代码说明

  1. 高效遍历:用os.scandir替代os.listdir,无需额外调用os.path判断文件类型,性能更优
  2. 递归构建:每个目录递归处理子目录,同时返回当前目录的内容字典和总大小
  3. 实时累加:文件大小直接累加到当前目录总size,子目录的总size也会同步累加
  4. 格式匹配:最后将根目录名作为顶层键,完全符合需求中的字典结构

输出验证

运行代码后,会生成和需求示例一致的字典结构,每个文件夹下的size字段自动计算为内部所有内容的大小总和。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:31:01