2017-01-13 5 views
1

두 종류의 파일을 확인하려면 수천 개의 디렉토리를 확인해야합니다. 그 범위 내에서 두 가지 종류의 파일 인 'jpg'와 '.thmb'가 있기 때문에 인덱스 또는 idx에 4 미만으로 제한되었습니다. 하지만이 두 종류의 파일이 디렉토리에 있어야한다는 if 문이 필요합니다. 은 if 문 :if 문에서 'and'사용

def missingFileSearch(): 
    for folder in setFinder(): 
     for idx,val in enumerate(os.listdir(folder)): 
      if idx < 4: 
       if ('.jpg' in val) and ('thmb' in val): 
        pass 
       else: 
        print'Data missing',folder,val,idx 
: 여기
Data missing W:\\North2015\200\10 200001000031.jpg 0 
Data missing W:\\North2015\200\10 200001000032.jpg 1 
Data missing W:\\North2015\200\100 200014000001.jpg 0 
Data missing W:\\North2015\200\100 200014000002.jpg 1 
Data missing W:\\North2015\200\101 200014100081.jpg 2 

아래 코드 :

if ('.jpg' in val) and ('thmb' in val): 

작품은 사실이 아니다 때이 데이터가 누락되어있는 다른 문을 통해 인쇄물가 계속 제외

그래서 나는 왜 내가 else 문을 통해 출력을 얻고 있는지 궁금합니다. 또한,이 코드 줄은 끊었됩니다 :

if val.endswith('.jpg') and ('thmb' in val): 
    print'Data is here!',folder,val,idx 

이 주로 내가 할 수있는 코드가 필요합니다 것입니다.

+1

''200001000031.jpg '에는' 'thmb' '가 포함되지 않습니다. 조건이 'if ('.jpg 'in val) 또는 ('thmb 'in val) :'('and'대신''또는') 인 상태입니까? –

+0

글쎄, 만약 'or'대신에 'and'를 사용하면 두 파일 중 하나라도 디렉토리에 있으면 조건부를 만족시킬 수 있지만 둘 다 만족하지는 않습니다. –

+2

@hollow_Victory : 모든 파일 이름이 아닌 * 각 파일 이름 *을 테스트 중입니다. –

답변

1

내가 이런 짓을 했을까 :

def missingFileSearch(): 
    folders_with_missing = [] 
    for folder in os.listdir(my_dir): 
     thmb_found = False 
     jpg_found = False 
     for fname in os.listdir(os.path.join(my_dir, folder)): 
      thmb_found |= 'thmb' in fname 
      jpg_found |= fname.endswith('.jpg') 
      if thmb_found and jpg_found: 
       break # break inner loop, move on to check next folder 
     else: # loop not broken 
      if not thmb_found and not jpg_found: 
       desc = "no thmb, no .jpg" 
      elif not thmb_found: 
       desc = "no thmb" 
      else: 
       desc = "no .jpg" 
      folders_with_missing.append((folder, desc)) 
    return folders_with_missing 

내가 자기 설명 이름을 가진 네 개의 테스트 폴더를 생성 :

def missingFileSearch(): 
    folders_with_missing = [] 
    for folder in setFinder(): 
     thmb_found = False 
     jpg_found = False 
     for fname in os.listdir(folder): 
      thmb_found |= 'thmb' in fname 
      jpg_found |= fname.endswith('.jpg') 
      if thmb_found and jpg_found: 
       break # break inner loop, move on to check next folder 
     else: # loop not broken 
      if not thmb_found and not jpg_found: 
       desc = "no thmb, no .jpg" 
      elif not thmb_found: 
       desc = "no thmb" 
      else: 
       desc = "no .jpg" 
      folders_with_missing.append((folder, desc)) 
    return folders_with_missing 

이 코드의 약간 수정 된 버전 (NO setFinder() 기능) 테스트 한

>>> os.listdir(my_dir) 
['both_thmb_jpg', 'missing_jpg', 'missing_thmb', 'no_files'] 

다음 함수를 실행하십시오.

>>> missingFileSearch() 
[('missing_jpg', 'no .jpg'), ('missing_thmb', 'no thmb'), ('no_files', 'no thmb, no .jpg')] 
+0

잘 작동하지만 '.jpg'로 끝나는 파일은 아직 미끄러 져 있습니다. 그래서 우리는 여전히 같은 문제가 있습니다. –

+0

jpg_end = False를 추가하고 jpg_end | = fname.endswith ('.jpg')를 추가하려고 시도했지만 여전히 동일하게 수행되었습니다. –

+0

@hollow_Victory : 더 자세히 설명해주세요. ''.jpg '와''thmb' '중 하나가 누락 된 디렉토리는 잡히지 않았습니까? –