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

Python如何创建可变深度递归嵌套目录并支持目录内文件复制

自适应嵌套目录创建方案

问题分析

你当前的实现硬编码了三层循环逻辑,仅支持固定深度的目录创建,无法适配后续新增的更深层级嵌套,也没有实现目标目录下的文件复制功能。采用递归遍历嵌套结构的方案可以完美解决自适应深度的需求。

实现方案

结构约定

我们统一目录结构的定义规则,保证任意深度嵌套都能被识别:

  • 整体用嵌套字典定义目录树,字典的key为目录名称
  • 若字典的value为dict类型,代表当前目录下还有下级子目录
  • 若字典的value为list类型,代表当前目录为叶子目录,列表内存储需要复制到该目录的源文件绝对/相对路径,空列表代表该目录不需要复制文件

完整代码

import os
import shutil

def create_dir_structure(parent_path, struct_node):
    # 遍历当前层级的所有目录节点
    for dir_name, sub_node in struct_node.items():
        # 拼接当前目录的完整路径
        current_dir = os.path.join(parent_path, dir_name)
        # 创建目录,已存在则自动跳过
        os.makedirs(current_dir, exist_ok=True)
        
        if isinstance(sub_node, dict):
            # 子节点是字典,递归创建下级目录
            create_dir_structure(current_dir, sub_node)
        elif isinstance(sub_node, list):
            # 子节点是列表,遍历复制文件到当前目录
            for src_file in sub_node:
                if os.path.isfile(src_file):
                    shutil.copy2(src_file, current_dir)
                else:
                    print(f"源文件不存在,跳过复制:{src_file}")

if __name__ == "__main__":
    root_path = './test'
    # 支持任意深度嵌套的目录结构定义,新增层级仅需修改此处
    directories = {
        'Block_models': [],
        'Borehole_data': [],
        'Design_data': [],
        'Grid_models': {
            'Assay': {
                'Raw': {
                    '2024': ['/source/raw_2024_1.csv', '/source/raw_2024_2.csv'],
                    '2023': []
                },
                'Wash': ['/source/wash_1.csv', '/source/wash_2.csv']
            },
            'Structure': {
                'f1': [],
                'f2': [],
                'f3': [],
                'f4': []
            }
        },
        'Map_files': {
            'Assay': [],
            'Structure': {
                'f1': [],
                'f2': [],
                'f3': [],
                'f4': []
            }
        },
        'Spec_files': [],
        'Triangulations': {
            'Faults': [],
            'Structure': [],
            'Topography': []
        }
    }
    create_dir_structure(root_path, directories)

代码说明

  • 自适应任意嵌套深度,后续要新增子目录仅需修改directories嵌套字典即可,无需调整逻辑代码
  • 内置目录存在判断,不会因目录已存在报错中断执行
  • 文件复制前会校验源文件有效性,无效文件仅打印提示不会导致程序崩溃
  • 可根据需求调整文件复制逻辑,比如新增重名文件重命名、覆盖提示等规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:05