2013-07-22 42 views
1

我正在寫一個簡單的函數,它遍歷目錄樹,查找某個名稱的文件夾。我所追求的是一場比賽的父路徑。例如,對於「C:/ a/b/c/MATCH」,我想要「C:/ a/b/c」。我不需要重複的父母或子文件夾匹配路徑,所以如果有「C:/ a/b/c/d/e/f/MATCH」,我不需要它。所以,在我走路的時候,一旦我有了父母,我想迭代到下一個當前的根。如何停止遍歷當前根並迭代到下一個

下面是我到目前爲止,包括我卡住的評論。

def FindProjectSubfolders(masterPath, projectSubfolders): 
    for currRoot, dirnames, filenames in os.walk(masterPath): 
     # check if have a project subfolder 
     foundMatch = False 
     for dirname in dirnames: 
      for projectSubfolder in projectSubfolders: 
       if (dirname == projectSubfolder): 
        foundMatch = True; 
        break 
     if (foundMatch == True): 
      # what goes here to stop traversing "currRoot" 
      # and iterate to the next one? 

回答

2

修剪dirnames空列表,以防止當前下面的目錄進一步遍歷:

def FindProjectSubfolders(masterPath, projectSubfolders): 
    for currRoot, dirnames, filenames in os.walk(masterPath): 
     # check if have a project subfolder 
     foundMatch = False 
     for dirname in dirnames: 
      for projectSubfolder in projectSubfolders: 
       if (dirname == projectSubfolder): 
        foundMatch = True; 
        break 
     if (foundMatch == True): 
      # what goes here to stop traversing "currRoot" 
      # and iterate to the next one? 
      dirnames[:] = [] # replace all indices in `dirnames` with the empty list 

注意上面的代碼改變列表dirnames指與片分配,它不是重新綁定dirnames到一個新的列表。