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
相关产品推荐
相关产品推荐

