2014-10-22 185 views
1
Folder1 
     |_Folder2 
     |  |_vm1 
     |  |_vm2 
     |  |_vm3 
     |_vm4 
     |_vm5 
     |_vm6 

一個項目我有這樣的結構,現在我寫的方法是:Python的遞歸找到文件夾或子文件夾

def find_vm(folder, vm_name): 
    for item in folder: 
     if isinstance(item, my_folder_object): 
      find_vm(item, vm_name) 
     if item.name == vm_name: 
      return item 

嵌套的文件夾可以是任何深度。此方法未按預期工作。

我在這裏做什麼錯?

+2

這是一個練習,瞭解遞歸?你是否嘗試過使用'os.walk()'而不是?例如,'vm = next(os.path.join(path,d)for path,dirs,_ in os.walk(folder)for d in dirs if d == vm_name)' – jfs 2014-10-22 10:17:33

+0

您應該使用調試器或至少打印本地化錯誤。 – Andrey 2014-10-22 10:17:59

+0

從來沒有聽說過'os.walk'。肯定會嘗試使用它。 – Amby 2014-10-22 10:22:34

回答

0

不必返回在任何一個分支:

... 
    ... 
     if isinstance(item, my_folder_object): 
      val = find_vm(item, vm_name) 
      if val is not None: 
       return val 
     ... 
      ... 

也,你需要決定做什麼,如果一個名稱是超過一個子文件夾;

+0

啊!愚蠢的錯誤:) – Amby 2014-10-22 10:28:22

相關問題