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

如何将目录结构转换为含文件列表的嵌套字典并导出为JSON

给目录结构JSON添加文件列表的修改方案

你当前的代码仅构建了目录的嵌套字典,但未将每个目录对应的文件列表存入节点。下面提供两种合法的JSON结构方案及对应代码:

方案1:清晰分离文件与子目录(推荐)

将每个目录节点设计为包含files(文件列表)和directories(子目录字典)的结构,格式规范易读:

import os
import json

def fs_tree(root_dir):
    results = {}
    for dirpath, dirnames, filenames in os.walk(root_dir):
        # 拆分出从根目录开始的路径层级
        parts = dirpath.split(os.sep)
        idx = parts.index(root_dir)
        path_parts = parts[idx:]
        
        # 定位到当前目录的父节点的子目录区
        curr = results
        for part in path_parts[:-1]:
            curr = curr.setdefault(part, {"files": [], "directories": {}})["directories"]
        
        # 创建/更新当前目录的节点,存入文件列表
        current_dir = path_parts[-1]
        if current_dir not in curr:
            curr[current_dir] = {"files": filenames, "directories": {}}
        else:
            curr[current_dir]["files"] = filenames
    return results

# 示例调用与JSON导出
dir_path = "./level_0"  # 替换为你的根目录路径
tree = fs_tree(dir_path)
with open("directory_tree.json", "w", encoding="utf-8") as f:
    json.dump(tree, f, indent=2, ensure_ascii=False)

输出示例

{
  "level_0": {
    "files": ["readme.md", "config.ini"],
    "directories": {
      "level_1a": {
        "files": ["data.csv"],
        "directories": {}
      },
      "level_1e": {
        "files": ["note.txt"],
        "directories": {
          "level_2a": {
            "files": ["image.png"],
            "directories": {}
          }
        }
      }
    }
  }
}

方案2:贴近你期望的紧凑结构

将文件列表作为目录节点的一个键(用_files避免与子目录名冲突),子目录作为同级键存在:

import os
import json

def fs_tree(root_dir):
    results = {}
    for dirpath, dirnames, filenames in os.walk(root_dir):
        parts = dirpath.split(os.sep)
        idx = parts.index(root_dir)
        path_parts = parts[idx:]
        
        # 定位到当前目录的父节点
        curr = results
        for part in path_parts[:-1]:
            curr = curr.setdefault(part, {})
        
        # 给当前目录节点添加文件列表
        current_node = curr.setdefault(path_parts[-1], {})
        current_node["_files"] = filenames
    return results

# 调用与导出
dir_path = "./level_0"
tree = fs_tree(dir_path)
with open("directory_tree.json", "w", encoding="utf-8") as f:
    json.dump(tree, f, indent=2, ensure_ascii=False)

输出示例

{
  "level_0": {
    "_files": ["readme.md", "config.ini"],
    "level_1a": {
      "_files": ["data.csv"]
    },
    "level_1e": {
      "_files": ["note.txt"],
      "level_2a": {
        "_files": ["image.png"]
      }
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:36:23