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

Python根据嵌套JSON配置递归生成多级文件夹目录结构

问题根因

你最初的实现有两个核心问题:

  • 仅遍历了folders字典的第一层键,没有识别值为嵌套字典的父目录节点,自然不会处理内层的Input_Data子目录
  • 直接取字典键作为目录名,没有适配你配置里的目录名映射规则(比如Archive键对应实际目录名是For_deposition),且使用os.mkdir仅能创建单级目录,嵌套场景下容易触发父目录不存在的报错。

你现有的JSON结构不需要调整,完全可以实现目标目录结构,只需要加递归遍历逻辑即可。

可直接运行的实现代码

通过递归函数遍历目录配置,自动处理单层目录、嵌套目录、目录名映射三种场景,使用os.makedirs加exist_ok=True参数避免目录已存在、父目录未创建的报错:

import os
import json

def build_dirs(config: dict, base_path: str = "") -> None:
    for dir_key, dir_val in config.items():
        # 识别当前目录的实际存储名称
        current_dir_name = dir_val if isinstance(dir_val, str) else dir_key
        current_path = os.path.join(base_path, current_dir_name)
        # 创建当前目录
        os.makedirs(current_path, exist_ok=True)
        # 如果当前节点存在子目录配置,递归向下创建
        if isinstance(dir_val, dict):
            build_dirs(dir_val, current_path)

# 读取配置文件并执行创建
if __name__ == "__main__":
    with open("your_dir_config.json", "r", encoding="utf-8") as f:
        whole_config = json.load(f)
    folder_config = whole_config["directory_structure"]["folders"]
    build_dirs(folder_config)

运行后生成的目录结构完全符合预期:

Documentation/
For_deposition/
Model/
Orthomosaic/
Project/
└── Input_Data/
Tiles/
可选:优化JSON结构提升可读性

如果你觉得现有结构的键值映射规则不够直观,也可以把JSON调整为统一节点格式,所有目录都显式声明名称和子节点,避免键值混淆,调整后的示例:

{
    "directory_structure": {
        "version": 1.0,
        "folders": [
            {"name": "Documentation"},
            {"name": "Archive", "actual_name": "For_deposition"},
            {"name": "Model"},
            {"name": "Orthomosaic"},
            {
                "name": "Project",
                "children": [
                    {"name": "Input_Data"}
                ]
            },
            {"name": "Tiles"}
        ]
    }
}

对应只需要把递归函数调整为遍历列表、读取name/actual_name/children字段即可,逻辑更直白,后续加更多目录属性(比如权限、备注)也更方便扩展。


内容的提问来源于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.27 15:09:21