如何从嵌套字典创建文件夹?

How to create folders from a nested dictionary?

如何在嵌套词典中创建包含所有词典名称的文件夹? 代码应该遍历字典并创建目录结构,就像在保留所有层次结构的嵌套字典中一样。

dic = {
    "root": {
        '0_name': {
            "0_name_a": {
                "0_name_a_a": {
                },
                "0_name_a_b": {
                    "file": "file"
                }                
            },
            "0_name_b": {
            }
            
        },
        "1_name": {
        },
        "2_name": {
        },
        "3_name": {
            "3_name": {
                          
            },
            
        }       
    }
}

应该创建如下目录:

root/0_name
root/0_name/0_name_a
root/0_name/0_name_a/0_name_a_a
root/0_name/0_name_a/0_name_a_b
root/0_name/0_name_b
root/1_name/1_name_a
root/2_name/
root/3_name/3_name(the same name)

脚本需要确定该值是否为最终值,并使用该路径创建一个文件夹,然后从字典中删除该值并重新开始。也以某种方式识别“文件”类型并跳过它。我无法确定迭代所有值并将它们添加到路径的递归方法。

我的方法(绝对行不通,只是粘贴它来展示一些东西):

def rec(dic):
    path = []
    def nova(dic):
        for k, v in dic.copy().items():
            if isinstance(v, dict):
                path.append(k)
                if not v: 
                    print(os.path.join(*path))
                    path.clear()
                    dic.pop(k)
                nova(v)
    if path == []:
        nova(dic)

您将需要一个递归程序,并且“路径”的值需要是该递归的一部分。

这不是您想要的,但也差不多了。

def handle_problem(dic):
    def one_directory(dic, path):
        for name, info in dic.items():
            next_path = path + "/" + name
            if isinstance(info, dict):
                print("Creating " + next_path) # actually use mkdir here!
                one_directory(info, next_path)
    one_directory(dic, '')