Je veux lire un fichier .csv en python.
- Je ne sais pas si le fichier existe.
- Ma solution actuelle est la suivante. Elle me semble peu soignée car les deux tests d'exception distincts sont maladroitement juxtaposés.
Y a-t-il un moyen plus joli de le faire ?
import csv
fName = "aFile.csv"
try:
with open(fName, 'rb') as f:
reader = csv.reader(f)
for row in reader:
pass #do stuff here
except IOError:
print "Could not read file:", fName
0 votes
Si un fichier inexistant n'est pas un cas d'erreur mais une circonstance probable, il faut alors vérifier et traiter son absence/non lisibilité explicitement avant (et en outre, à) la
try
pourrait en valoir la peine. Cela peut être fait avecos.path.exists(file)
etos.access(file, os.R_OK)
respectivement. Une telle vérification ne peut jamais être exempte d'une condition de course, mais la disparition de fichiers est rarement une circonstance normale ;)2 votes
Les réponses à cette question devraient probablement être mises à jour afin d'inclure l'utilisation de l'outil d'évaluation de la qualité de l'eau.
pathlib
qui rend ce problème beaucoup plus facile, et devrait probablement être une pratique standard de Python (d'autant plus qu'il a également été rétroporté dans la version 2.7).0 votes
Tandis que celui-ci attrape
IOError
il n'attrape pascsv.Error
en raison du fait que le fichier n'est pas au format CSV lorsqueDialect.strict=True
ouError
pour toute autre erreur (selon la documentation du paquet CSV), donc un essai externe, ou simplement la vérification de l'existence du fichier, puis un essai interne pour les exceptions CSV est probablement la bonne réponse.0 votes
@pinkspikyhairman Oui, dans votre gestionnaire d'exceptions, vous devez décider quels types d'erreurs vous voulez traiter. Voir ici pour savoir comment gérer plusieurs types d'erreurs spécifiques : stackoverflow.com/questions/6470428/