从嵌套字典创建文件树 | Python 2.7

Create file-tree from nested dict | Python 2.7

我有一个这样的嵌套字典:

Main = {
    'root' : {
        'object': 'data'
        'users': {
            'otherobj': 'data'
        }
    }
}

此代码段应该有所帮助。这里我假设 python 脚本将在目标本地目录中 运行。

import os

# dir_definition = <your 'Main'>

def create_dirs(dir_definition):
    for dir_dame, sub_dir in dir_definition.items():
        os.mkdir(dir_dame)
        if isinstance(sub_dir, dict):
            create_dirs(sub_dir)

如果我没理解错的话,你希望得到如下结果:

  • root/object 包含 data
  • root/users/otherobj 包含 data
  • 等等

所以让我们稍微分解一下。您基本上需要能够做两件事:

  • 确定字典中某个键的值是 "data" 还是另一个字典
  • 给定一些数据,将其写入具有给定路径的文件

我将留给您编写这些函数,但我假设它们具有以下签名:

  • def is_data(obj) 返回 True/False(这可能是 not isinstanceof(obj, dict) 除非您的数据对象可能是具有某些特殊属性的字典)
  • def write_data(directory, filename, obj)

此时,我们已准备好编写一个函数来遍历树。我假设您从 Main 中取出第一个键和字典。对于每个 (key, value) 对,我们需要检查值是 "data" 还是另一个字典。如果是数据,就把它写出来。如果它是另一个字典,我们将键添加到我们的路径并在 that 字典上调用我们的函数。

def walk(root_directory, obj_dict):
    for k, v in obj_dict.iteritems():
        if is_data(v):
            # write the file
            write_data(root_directory, k, v)
        else: # it's another dict, so recurse
            # add the key to the path
            new_root = os.path.join(root_directory, k) # you'll need to import os
            walk(new_root, v)