2015-10-28 5 views
8

現在のディレクトリを確認し、拡張子のファイルが存在するかどうかを確認する必要があります。私のセットアップは(通常)この拡張子を持つ1つのファイルしか持っていません。そのファイルが存在するかどうかを確認し、存在する場合はコマンドを実行する必要があります。ディレクトリに指定された拡張子のファイルが含まれていることを確認してください。

ただし、代替拡張子を持つ複数のファイルがあるため、elseが複数回実行されます。ファイルが存在しない場合は、elseのみ実行する必要があります。私のコードサンプルは以下の通りです。


ディレクトリがそうのように構成されています

dir_________________________________________ 
    \   \   \   \  
file.false file.false file.true file.false 

私は実行すると:

import os 
for File in os.listdir("."): 
    if File.endswith(".true"): 
     print("true") 
    else: 
     print("false") 

出力は次のようになります。

false 
false 
true 
false 

私ならばこれで問題がありますprint("false")と交換有用な何か、それはそれを複数回実行します。

編集:ので、私は他の人のためにここにこれを残したいのですが、私は2年前にこの質問をし、そしてそれはまだ非常に軽度の活動を見ています:http://book.pythontips.com/en/latest/for_-_else.html#else-clause

答えて

11

あなたはforelseブロックを使用することができます。 forループを何かを検索する方法として考えると、breakはあなたが何かを見つけたかどうかを伝えます。 elseは、探しているものが見つからなかったときに実行されます。

代わり:

if not any(fname.endswith('.true') for fname in os.listdir('.')): 
    # do stuff if a file .true doesn't exist 

またあなたの代わりにlistdirglobモジュールを使用することができます。

import glob 
# stuff 
if not glob.glob('*.true')`: 
    # do stuff if no file ending in .true exists 
5

あなただけのことを確認したい場合任意のファイルが特定の拡張子で終了する場合は、anyを使用します。

for fname in os.listdir('.'): 
    if fname.endswith('.true'): 
     # do stuff on the file 
     break 
else: 
    # do stuff if a file .true doesn't exist. 

forに添付elseがループ内breakが実行ないあるたびに実行されます。

import os 
if any(File.endswith(".true") for File in os.listdir(".")): 
    print("true") 
else: 
    print("false") 
3

あなたはあなたがしている正確にファイルを探すためにglobモジュールを使用する必要があります興味がある:

import glob 

fileList = glob.glob("*.true") 
for trueFile in fileList: 
    doSomethingWithFile(trueFile) 
関連する問題