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)
다음 코드를 달성하기 위해 노력하고 있지만 좀 더 파이썬적인 방법입니다.체크 문자열에 고유 목록의 값이 포함되거나 포함되지 않음
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)
어떻게이 '깔끔하게'달성 할 수있다 : 나는 하나의 추가 기준을 가지고 아래에서 관리하지만 추가 기준의 목록을 반복해야합니까?
if any(each in dirpath for each in listIncludedFolders) and \
not any(each in dirpath for each in listExcludedFolders):
print(dirpath)
또는 다른 and
호출 (조건 부정) :
여기에 귀하의 추천을 따르지 않을지 확실하지 않습니다. 내가보고있는 결과는 os.walk를 사용하면 제외 된 디렉토리가 입력되지 않는다는 것입니다. 또한 os.path.walk가 사용되지 않으며 피해야한다는 것을 이해했습니다. 나는 확실히 디렉토리에 시간을 낭비하고 싶지 않다 ... – user3535074
'os.path.walk'가 더 이상 사용되지 않는다는 힌트를 주셔서 고마워요. 위의 코드가 제외 된 디렉토리에도 들어 있다고 확신합니다. 당신은 os.walk와도 그것을 피할 수 있습니다. 그에 따라 대답을 편집했습니다. – hvwaldow
감사합니다. 코드를 사용해 봤습니다. 그것은 답변으로 게시 한 것보다 훨씬 빠르게 실행되지만 게시 한 답변보다 더 많은 폴더를 찾습니다. "if set (dirpath.split (os.path.sep)) & set (listIncludedFolders) :"라인 때문에. 이 라인을 설명해 주시겠습니까? 그 일이 무엇인지 잘 모르겠습니다. – user3535074