2017-01-13 10 views
1

2種類のファイルに対して何千ものディレクトリをチェックする必要があります。私は、その範囲内には、 'jpg'と '.thmb'の2種類のファイルが存在するので、インデックスまたはidxには4未満に制限されています。しかし、これらの2種類のファイルがディレクトリに存在することを要求するには、if文が必要です。 if文:if文で 'と'を使用する

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(' val ')または(' thmb 'in val): '(' and 'の代わりに'または ')であることを意味しましたか? –

+0

まあ私は、 'と'の代わりに 'と'を使用すると、いずれかのファイルがディレクトリにある場合に条件付きを満たしますが、両方には該当しないと考えます。 –

+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 

私は自明の名前の4つのテストフォルダを作成:

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 

私はこのコードを少し変更したバージョン(なし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 "のいずれかが欠けているディレクトリがありますか? –

関連する問題