Un fichier de notes aux lignes abîmées
Lire un fichier texte en Python se fait avec open et with. Gérer une erreur se fait avec try et except, qui laissent le programme continuer au lieu de s’arrêter.
Un fichier de notes exporté par un tableur contient souvent une ligne vide ou un mot à la place d’un nombre. Un bon programme lit les lignes valides et signale les autres.
À la fin de cette leçon
Remarque
Je peux lire un fichier texte et traiter une erreur sans arrêter le programme.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Fichier texte | un fichier fait de lignes de caractères | scores.txt |
| with | le mot qui ouvre un fichier et le referme tout seul | |
| Exception | une erreur qui arrête le programme | ValueError |
| try | le bloc où l’on essaie une opération risquée | |
| except | le bloc qui traite l’erreur attrapée |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
with open lit un fichier ligne par ligne
open("scores.txt") ouvre un fichier. Avec with open(...) as fichier:, Python le referme tout seul à la fin du bloc. Vous n’avez rien à oublier.
Une boucle for ligne in fichier donne les lignes une à une. Chaque ligne finit par un saut de ligne : ligne.strip() l’enlève, avec les espaces autour.
Traiter des lignes d’un fichier de notes
# Les lignes d'un fichier de notes, simulées dans une liste.
lignes = ["Lea;14", "Hugo;12", "Zoe;18\n"]
for ligne in lignes:
ligne = ligne.strip()
morceaux = ligne.split(";")
print(morceaux[0], "a eu", morceaux[1])
# Ajoutez la ligne "Noa;9" à la liste.
Du texte de la ligne à ses morceaux
| Instruction | Valeur obtenue | Ce qui change |
|---|---|---|
| ligne | "Zoe;18\n" | la ligne telle que le fichier la donne |
| ligne.strip() | "Zoe;18" | le saut de ligne a disparu |
| ligne.split(";") | ["Zoe", "18"] | deux morceaux de texte |
| morceaux[1] | "18" | un texte, pas encore un nombre |
| int(morceaux[1]) | 18 | un entier qu’on peut additionner |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Créer le fichier scores.txt
printf 'Lea;14\nHugo;abc\nZoe;12\n' > scores.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le programme lire.py
printf 'with open("scores.txt") as fichier:\n for ligne in fichier:\n print(ligne.strip())\n' > lire.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire le fichier ligne par ligne
python3 lire.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
try et except attrapent une erreur
Certaines opérations échouent : lire « abc » comme un nombre donne une erreur, ici ValueError. Sans traitement, le programme s’arrête net.
Mettez l’opération risquée dans un bloc try. Si elle échoue, Python saute au bloc except et le programme continue. Nommez l’erreur attendue, sans attraper toutes les autres.
Ignorer une ligne qui n’est pas un nombre
# try essaie, except attrape l'erreur.
for texte in ["14", "abc", "7"]:
try:
note = int(texte)
print("Note lue :", note)
except ValueError:
print("Ligne ignorée :", texte)
# Ajoutez "20.5" à la liste : que se passe-t-il ?
Erreur fréquente
Attention
Beaucoup pensent qu’un except sans nom d’erreur est plus sûr. Il cache aussi vos propres fautes, comme un nom mal écrit. Écrivez except ValueError: : seule l’erreur prévue est traitée, les autres restent visibles.
Écrire le programme erreur.py
printf 'try:\n nombre = int("abc")\n print(nombre)\nexcept ValueError:\n print("Ce nest pas un nombre")\n' > erreur.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer le programme sans qu’il plante
python3 erreur.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le mode "w" écrit dans un fichier
Pour écrire, ouvrez le fichier avec "w" : open("bilan.txt", "w"). Le fichier est créé, ou vidé s’il existait déjà. Écrivez avec fichier.write(texte).
write n’ajoute pas de saut de ligne tout seul. Ajoutez-le vous-même avec "\n" à la fin du texte.
Écrire le programme ecrire.py
printf 'with open("bilan.txt", "w") as fichier:\n fichier.write("Total : 26\\n")\n' > ecrire.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer le programme qui écrit
python3 ecrire.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lire le fichier créé
cat bilan.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin
Écrivez un programme qui lit scores.txt, additionne les notes valides et écrit le total dans bilan.txt. Ignorez la ligne « Hugo;abc » avec try et except ValueError.
Avec les trois lignes du fichier, quel total attendez-vous ? Vérifiez avec cat bilan.txt.