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

问题描述

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

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)

解决方法

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

这不是您想要的,但是很接近。

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,'')