Represent directory tree as JSON

后端 未结 3 990
甜味超标
甜味超标 2020-12-13 07:17

Is there any easy way to generate such a JSON? I found os.walk() and os.listdir(), so I may do recursive descending into directories and build a py

相关标签:
3条回答
  • 2020-12-13 07:37

    On Linux, the command-line tool tree can be used, although it is not installed by default. The output is almost identical to that required by the OP, using the flag -J for JSON output (which can then be streamed to a file for example):

    tree -J folder
    

    On OSX, this tool can be installed via Homebrew.

    0 讨论(0)
  • 2020-12-13 07:38

    I just had to do this (well, almost) so hit this page but the above doesn't recurse into subdirectories.

    So this version only handles directories, not files, but you could add those.

    First generate a nested python dict:

    def fs_tree(root):
        results = {}
        for (dirpath, dirnames, filenames) in os.walk(root):
            parts = dirpath.split(os.sep)
            curr = results
            for p in parts:
                curr = curr.setdefault(p, {})
        return results
    

    Secondly dump that to json using the json module.

    0 讨论(0)
  • 2020-12-13 07:40

    I don't think that this task is a "wheel" (so to speak). But it is something which you can easily achieve by means of the tools you mentioned:

    import os
    import json
    
    def path_to_dict(path):
        d = {'name': os.path.basename(path)}
        if os.path.isdir(path):
            d['type'] = "directory"
            d['children'] = [path_to_dict(os.path.join(path,x)) for x in os.listdir\
    (path)]
        else:
            d['type'] = "file"
        return d
    
    print json.dumps(path_to_dict('.'))
    
    0 讨论(0)
提交回复
热议问题