Je dois vérifier le répertoire actuel et voir si un fichier avec une extension existe. Ma configuration n'aura (généralement) qu'un seul fichier avec cette extension. J'ai besoin de vérifier si ce fichier existe, et si c'est le cas, exécutez une commande.
Cependant, il exécute le else
plusieurs fois car il existe plusieurs fichiers avec des extensions alternatives. Il ne doit exécuter le else
que si le fichier n'existe pas, pas une fois pour tous les autres fichiers. Mon exemple de code est ci-dessous.
Le répertoire est structuré comme suit:
dir_________________________________________
\ \ \ \
file.false file.false file.true file.false
Quand je cours:
import os
for File in os.listdir("."):
if File.endswith(".true"):
print("true")
else:
print("false")
La sortie est:
false
false
true
false
Le problème avec ceci est que si je remplace print("false")
par quelque chose d'utile, il l'exécutera plusieurs fois.
Edit: J'ai posé cette question il y a 2 ans, et il y a toujours une activité très légère, donc, je voudrais laisser ceci ici pour d'autres personnes: http://book.pythontips.com/en/latest/for_-_else.html#else-clause
Vous pouvez utiliser le bloc else
du 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.
Le else
attaché à un for
sera exécuté chaque fois que le break
à l'intérieur de la boucle est pas réalisé. Si vous pensez qu'une boucle for
est un moyen de rechercher quelque chose, alors break
indique si vous avez trouvé ce quelque chose. else
est exécuté lorsque vous n'avez pas trouvé ce que vous cherchiez.
Alternativement:
if not any(fname.endswith('.true') for fname in os.listdir('.')):
# do stuff if a file .true doesn't exist
De plus, vous pouvez utiliser le module glob
au lieu de listdir
:
import glob
# stuff
if not glob.glob('*.true')`:
# do stuff if no file ending in .true exists
Si vous souhaitez uniquement vérifier qu'un fichier se termine par une extension particulière, utilisez any
.
import os
if any(File.endswith(".true") for File in os.listdir(".")):
print("true")
else:
print("false")
Vous devez utiliser le module glob
pour rechercher exactement les fichiers qui vous intéressent:
import glob
fileList = glob.glob("*.true")
for trueFile in fileList:
doSomethingWithFile(trueFile)