2017-08-15 60 views
-2

有一個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 

我覺得這種方式不是最好的。有任何想法嗎?非常感謝你!

+0

忘記_best_方式。你有沒有嘗試過,最好還是不? – DyZ

回答