listIncludedFolders = ["Criteria1"]
listExcludedFolders = ["Criteria2"]
for dirpath, dirnames, filenames in os.walk(root):
proceed = False
for each in listIncludedFolders:
if each in dirpath:
proceed = True
if proceed == True:
for each in listExcludedFolders:
if each in dirpath:
proceed = False
if proceed == True:
print(dirpath)
我試圖實現下面的代碼,但以更pythonic的方式。使用發電機我可以設法繼續基於單個列表的項目:檢查字符串包括/不包括來自不同清單的值
if any(dir in dirpath for dir in listIncludedFolders):
print(dirpath)
...但我不能添加第二個比較。我在下面的管理有一個附加的標準,但我需要遍歷的附加標準的列表:
if any(dir in dirpath for dir in listIncludedFolders if("Criteria2" not in dirpath)):
print(dirpath)
我怎樣才能做到這一點「乾淨」?
我不確定我是否按照您的建議。我看到的結果是使用os.walk排除的目錄沒有被輸入。我也明白,os.path.walk已被棄用,應該避免。我當然不想浪費時間在目錄中...... – user3535074
嘿謝謝'os.path.walk'已被棄用的暗示。我相信你上面的代碼也會進入排除目錄。原來你也可以用os.walk來避免這種情況。我相應地編輯了答案。 – hvwaldow
謝謝 - 我試過你的代碼。它的運行速度比我發佈的答案快很多,但它也發現了更多的文件夾,而不是我發佈的答案中找到的文件夾。也許是因爲「if set(dirpath.split(os.path.sep))&set(listIncludedFolders):」這行。你能解釋一下這條線嗎?我不確定它在做什麼。 – user3535074