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

에서 항목을 찾기 위해 지금 내가 쓰고있는 방법은 다음과 같습니다파이썬 재귀 내가이 구조를 가지고 폴더 또는 하위 폴더

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 (경로, d)에 대한 경로, dirs, os.walk (폴더)의 d에 d == vm_name 인 경우 ')' – jfs

+0

디버거를 사용하거나 적어도 인쇄해야합니다. 오류를 지역화합니다. – Andrey

+0

'os.walk'에 대해 들어 본 적이 없습니다. 확실히 사용하려고합니다. – Amby

답변

0

당신은 가지 중 하나에서 아무것도 반환되지 않습니다 또한

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

, 당신은 이름이 두 개 이상의 하위 폴더에있는 경우 어떻게 할 것인지를 결정해야합니다을;

+0

아! 바보 같은 실수 :) – Amby

관련 문제