2014-10-12 107 views
0

我有一個目錄結構:遞歸添加到字典在Python

test 
    test2 
     test3 

,我試圖做的是一本字典應該像這樣說:

{'name': 'test', 'sub': [{'name': 'test2', 'sub': [{'name': 'test3', 'sub': []}]}, ]} 

要做到這一點我使用下面的遞歸函數:

def dir_struct(rootdir): 
    a = {} 
    rootdir = rootdir.rstrip(os.sep) 
    a["name"] = rootdir 
    a["sub"] = [] 
    for path, dirs, files in os.walk(rootdir): 
     for dir in dirs: 
      b = dir_struct(dir) 
      a["sub"].append(b) 
    return a 

但隨着它,我得到

{'name': 'test', 'sub': [{'name': 'test2', 'sub': []}, {'name': 'test3', 'sub': []}]} 

有沒有辦法解決這個問題?

回答

3

問題是os.walk已經是一個遞歸函數,它貫穿整個目錄結構。

一個解決方案是使用os.listdir而不是os.walk
這就是你想要的:

def dir_struct(rootdir): 
    a = {} 
    rootdir = rootdir.rstrip(os.sep) 
    a["name"] = rootdir.split(os.sep)[-1] 
    a["sub"] = [] 
    for dir in os.listdir(rootdir): 
     b = dir_struct(rootdir + os.sep + dir) 
     a["sub"].append(b) 
    return a 
+0

謝謝你,好友!奇蹟般有效! – Ben 2014-10-12 10:32:31