現在のディレクトリを確認し、拡張子を持つファイルが存在するかどうかを確認する必要があります。私のセットアップでは、(通常)この拡張子を持つファイルは1つだけです。そのファイルが存在するかどうかを確認し、存在する場合はコマンドを実行する必要があります。
ただし、代替拡張子を持つ複数のファイルがあるため、else
を複数回実行します。ファイルが存在しない場合にのみelse
を実行する必要があり、他のすべてのファイルに対して1回ではありません。私のコードサンプルは次のとおりです。
ディレクトリは次のように構成されています。
_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
else
のfor
ブロックを使用できます。
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.
else
にアタッチされたfor
は、ループ内のbreak
がnotであるときに実行されます実行されました。何かを検索する方法としてfor
ループを考える場合、break
はその何かを見つけたかどうかを伝えます。 else
は、探しているものが見つからなかったときに実行されます。
代わりに:
if not any(fname.endswith('.true') for fname in os.listdir('.')):
# do stuff if a file .true doesn't exist
さらに、glob
の代わりに listdir
モジュールを使用できます。
import glob
# stuff
if not glob.glob('*.true')`:
# do stuff if no file ending in .true exists
ファイルが特定の拡張子で終わることだけを確認したい場合は、any
を使用します。
import os
if any(File.endswith(".true") for File in os.listdir(".")):
print("true")
else:
print("false")
glob
モジュールを使用して、目的のファイルを正確に検索する必要があります。
import glob
fileList = glob.glob("*.true")
for trueFile in fileList:
doSomethingWithFile(trueFile)