Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire un fichier et gérer les erreurs

Après cette leçon: Je peux lire un fichier texte et traiter une erreur sans arrêter le programme.

Leçon de 65 min8 commandesLab Linux du quotidien : la trentaine de commandes que les ingénieurs tapent de tête

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

MotCe que ça veut direExemple
Fichier texteun fichier fait de lignes de caractèresscores.txt
withle mot qui ouvre un fichier et le referme tout seul
Exceptionune erreur qui arrête le programmeValueError
tryle bloc où l’on essaie une opération risquée
exceptle 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

Code: python
# 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

InstructionValeur obtenueCe 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])18un entier qu’on peut additionner

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Créer le fichier scores.txt

Commande
printf 'Lea;14\nHugo;abc\nZoe;12\n' > scores.txt

Affiché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

Commande
printf 'with open("scores.txt") as fichier:\n    for ligne in fichier:\n        print(ligne.strip())\n' > lire.py

Affiché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

Commande
python3 lire.py

Affiché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

Code: python
# 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

Commande
printf 'try:\n    nombre = int("abc")\n    print(nombre)\nexcept ValueError:\n    print("Ce nest pas un nombre")\n' > erreur.py

Affiché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

Commande
python3 erreur.py

Affiché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

Commande
printf 'with open("bilan.txt", "w") as fichier:\n    fichier.write("Total : 26\\n")\n' > ecrire.py

Affiché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

Commande
python3 ecrire.py

Affiché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éé

Commande
cat bilan.txt

Affiché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.

À propos de ce labo et de sa source: Lab Linux du quotidien : la trentaine de commandes que les ingénieurs tapent de tête

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.