有没有简单的方法来生成这样的JSON?我发现os.walk()
和os.listdir()
,所以我可以递归下降到目录并构建一个python对象,好吧,但这听起来像重新发明一个轮子,也许有人知道这样的任务的工作代码?
{
"type": "directory",
"name": "hello",
"children": [
{
"type": "directory",
"name": "world",
"children": [
{
"type": "file",
"name": "one.txt"
},
{
"type": "file",
"name": "two.txt"
}
]
},
{
"type": "file",
"name": "README"
}
]
}
答案 0 :(得分:29)
我不认为这个任务是一个"轮" (可以这么说)。但是你可以通过你提到的工具轻松实现这一目标:
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('.'))
答案 1 :(得分:11)
在Linux上,可以使用命令行工具tree
,但默认情况下不。输出几乎与OP所需的输出相同,使用标记-J
进行JSON输出(例如,可以将其传输到文件):
tree -J folder
在OSX上,可以通过Homebrew安装此工具。
答案 2 :(得分:0)
我只需要这样做(好了,差不多),所以点击此页面,但是above不会递归到子目录中。
因此,此版本仅处理目录,而不处理文件,但是您可以添加这些目录。
首先生成一个嵌套的python字典:
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
使用json
模块将其转储到json。