Representa el árbol de directorios como JSON

¿Hay alguna manera fácil de generar tal JSON? Encontré os.walk() y os.listdir() , así que puedo descender de forma recursiva a directorios y construir un objeto de Python, bueno, pero suena como reinventar una rueda, ¿tal vez alguien sabe el código de trabajo para esa tarea?

 { "type": "directory", "name": "hello", "children": [ { "type": "directory", "name": "world", "children": [ { "type": "file", "name": "one.txt" }, { "type": "file", "name": "two.txt" } ] }, { "type": "file", "name": "README" } ] } 

No creo que esta tarea sea una “rueda” (por así decirlo). Pero es algo que puede lograr fácilmente mediante las herramientas que mencionó:

 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('.')) 

En Linux, se puede usar el tree herramientas de la línea de comandos, aunque no está instalado de forma predeterminada. La salida es casi idéntica a la requerida por el OP, utilizando el indicador -J para la salida JSON (que puede transmitirse a un archivo, por ejemplo):

 tree -J folder 

En OSX, esta herramienta se puede instalar a través de Homebrew .