Преобразовать список путей к файлам в дерево
Есть путь к файлу Python, как показано ниже:
file_path_list = ["test/dir1/log.txt", "test/dir1/dir2/server.txt", "test/manage/img.txt"]
Я хочу преобразовать это в дерево. ожидаемый результат ниже:
tree_data = [
{
"path": "test",
"children": [
{
"path": "dir1",
"children": [
{
"path": "log.txt"
},
{
"path": "dir2",
"children": [
{
"path": "server.txt"
}
]
}
]
},
{
"path": "manage",
"children": [
{
"path": "img.txt",
}
]
}
]
}
]
Какой лучший способ конвертировать?
Обновление: мой код ниже, но я думаю, что это не очень хорошо.
def list2tree(file_path):
"""Convert list to tree."""
tree_data = [{
"path": "root",
"children": []
}]
for f in file_path:
node_path = tree_data[0]
pathes = f.split("/")
for i, p in enumerate(pathes):
length = len(node_path["children"])
if not length or node_path["children"][length - 1]["path"] != p:
# create new node
new_node = {
"path": p,
}
if i != len(pathes) - 1: # middle path
new_node["children"] = list()
node_path["children"].append(new_node)
node_path = new_node
else:
node_path = node_path["children"][length - 1]
return tree_data
Я думаю, что этот путь не самый лучший. есть идеи? Большое спасибо!
1 ответ
Один из способов - разделить строки в '/' и поместить их в defaultdict defaultdicts, см. Defaultdict из defaultdict, вложенный.