Mon Labo Python

Réussir à lire un fichier texte en python grâce à ma formation

Débutante apprenant à lire un fichier texte en Python à sa table de cuisine, formation Python en soirée
Ce billet contient des liens affiliés : si un achat se fait via l'un d'eux, je touche une petite commission, sans que le prix change pour vous.

Il est difficile de savoir combien de fois il faut fixer le même message d'erreur avant d'admettre qu'on n'y comprend rien. Je ne sais pas répondre à cette question avec un chiffre précis, mais elle revient presque à chaque fois qu'un fichier refuse de s'ouvrir quand on apprend Python en débutante complète. Perrine, qui me lit depuis Bordeaux et commente presque chaque billet, m'a écrit récemment pour me demander comment, concrètement, on arrive à lire un fichier texte sans finir en larmes devant l'écran. Ce carnet est ma réponse, telle que je la comprends après deux ans à passer mes soirées sur ce que ma formation Python m'a montré, table de cuisine à Clermont-Ferrand.

Le fichier introuvable, ou comment j'ai cru que mon ordinateur m'en voulait

La première question que tout le monde se pose, moi la première, c'est pourquoi Python renvoie ce fameux FileNotFoundError alors que le fichier est juste là, sous nos yeux, sur le bureau. La réponse tient en une idée toute simple une fois qu'on l'a comprise : Python ne regarde pas où vous voyez le fichier, il regarde dans un dossier précis, le dossier courant, et si votre script n'y habite pas, il ne trouvera rien, même si le fichier est ouvert juste à côté dans une autre fenêtre. Ce genre de message fait partie d'une famille entière d'erreurs Python, chacune avec sa propre logique à décoder, un sujet que je garde pour un autre carnet.

Un soir en particulier reste gravé : plutôt que de refermer l'ordinateur et d'aller me coucher, je suis restée devant l'écran à traquer cette erreur jusqu'au bout, le stylo roulant contre le bord de mon cahier de brouillon pendant que je cherchais ce qui clochait.

Avant d'en arriver là, j'avais déjà tenté autre chose : je m'étais inscrite à un MOOC en ligne, pleine de bonne volonté, et je l'avais abandonné très vite, avant même d'avoir dépassé les tout premiers chapitres. Ce n'est pas que c'était mauvais, juste que je m'y perdais sans personne pour répondre à mes questions de débutante.

C'est en reprenant les bases avec calme, via ma formation Python, que le déclic a fini par arriver — pas de grande révélation, juste des leçons courtes que je pouvais caler entre la vaisselle et le moment de fermer l'ordinateur.

Cahier de brouillon et vieux ordinateur portable sur une table de cuisine, message d'erreur Python affiché en pleine session d'apprentissage débutant

Pourquoi with open() a changé ma lecture de fichier en Python

La syntaxe with open(), une fois qu'on l'a apprivoisée, ressemble à un service compris dans le lot : Python ouvre la porte du fichier pour vous, vous laisse lire ou écrire tranquillement, puis referme tout seul derrière vous, même si une erreur survient en cours de route. Avant de connaître cette syntaxe, j'ouvrais le fichier et j'oubliais souvent de le refermer, ce qui finissait par coincer quelque chose plus loin dans le code sans que je comprenne pourquoi.

Ce bloc de code sous le with doit respecter une indentation précise, et c'est justement là que j'ai raté mes premiers essais, avec des espaces mal alignés qui faisaient tout planter sans explication claire. Une fois cette manie prise, j'ai aussi commencé à ranger ce genre de code dans une petite fonction à moi, pour ne pas retaper les mêmes lignes chaque fois que j'ouvre un fichier différent.

Écran affichant la syntaxe with open() en Python, exemple concret pour la lecture de fichier texte en formation

Quel mode choisir entre r, w, a et x ?

Il existe quatre façons de demander à Python d'ouvrir un fichier : lire seulement, écrire par-dessus, ajouter à la fin, ou créer un fichier neuf. Le mode qui écrit par-dessus tout, celui qu'on note avec la lettre w, m'a fait une peur bleue au début, un peu comme si on prenait une gomme géante sur un cahier entier avant même d'avoir décidé quoi écrire à la place.

Ma solution, longtemps, a été de rester sur le mode lecture tant que je n'étais pas sûre de moi, et de vérifier avant toute chose si le fichier existait vraiment grâce à une simple condition. Pour les accents de mes mots, un petit réglage d'encodage évite qu'ils se transforment en symboles bizarres à l'écran, sans que j'aie besoin de savoir exactement comment ça fonctionne dans les coulisses.

Ranger ce qu'on lit : listes, variables et petits tris

Une fois le fichier ouvert, tout ce que Python récupère doit atterrir quelque part, et c'est là que les variables entrent en jeu : je donne un nom à ce que je viens de lire, comme on étiquette un bocal avant de le ranger au frigo. Pour garder plusieurs lignes ensemble, j'ai fini par écrire un mot sur comment utiliser les listes Python pour organiser ses données, qui m'a beaucoup aidée à comprendre pourquoi une liste range les choses dans un ordre précis, comme les étagères de mon placard à épices.

Le texte lu dans un fichier arrive souvent avec des espaces ou des sauts de ligne en trop, et nettoyer ces chaînes de caractères avant de les utiliser m'a évité pas mal de surprises absurdes plus tard. Pour associer une information à une autre, un nom et une quantité par exemple, j'utilise maintenant un dictionnaire plutôt qu'une liste toute simple, un peu comme un carnet d'adresses où chaque entrée a sa propre fiche.

Et si le message d'erreur ne veut rien dire ?

Perrine m'a aussi demandé ce qu'il fallait faire quand l'erreur ne ressemble à rien de connu, et sa question mérite une vraie réponse plutôt qu'un haussement d'épaules. J'entoure maintenant mes lectures de fichiers d'un bloc try/except, histoire que le programme explique poliment ce qui a raté au lieu de s'arrêter net avec une page rouge illisible.

Le réflexe que je garde de tout ça, c'est de toujours vérifier le nom exact du fichier et son emplacement avant de blâmer le code lui-même. La plupart de mes blocages venaient de là, pas d'un bug caché quelque part.

Vue depuis la table de cuisine sur le quartier Montferrand à la nuit tombée, ordinateur affichant du code Python

Ce qui traîne autour de la lecture de fichier, entre boucles et petits imports

Lire un fichier entier d'un coup, c'est pratique, mais parcourir chaque ligne l'une après l'autre avec une boucle for permet de traiter les choses au fur et à mesure, un peu comme trier le linge pièce par pièce plutôt que de vider toute la machine sur le lit. Voici à quoi ressemble ce genre de code chez moi, table de cuisine, tisane qui refroidit tranquillement à côté du clavier :

with open('notes.txt', 'r', encoding='utf-8') as fichier:
    for ligne in fichier:
        print(ligne.strip())

Pour ne pas écrire le chemin du fichier en dur à chaque fois, j'ai commencé à m'appuyer sur un import tout simple, celui du module qui gère les chemins, plutôt que de tout retaper à la main. Certains soirs, je demande même le nom du fichier directement à l'utilisatrice — moi, en l'occurrence — grâce à la fonction input, ce qui rend le petit script un peu plus vivant qu'une suite de lignes figées.

Cette curiosité pour ce qui se passe plus profondément dans une machine m'a parfois donné envie de regarder du côté de la formation Cisco, pour comprendre un peu les réseaux, même si je sais qu'il faut que je reste concentrée sur mes boucles et mes fichiers pour l'instant. Quand le débogage tourne à la petite crise de nerfs, ce qui arrive plus souvent que je ne voudrais l'admettre, mes astuces pour déboguer son code python sans perdre patience me servent de garde-fou.

Avant tout ça, il avait fallu installer Python sur mon ordinateur Windows, une étape que j'avais un peu bâclée la première fois sans comprendre pourquoi rien ne se lançait ensuite depuis le terminal.

Cassandre, mon amie d'enfance qui n'a jamais touché une ligne de code de sa vie, me répète souvent qu'apprendre lentement ne veut pas dire apprendre mal, et c'est peut-être la phrase qui m'aide le plus les soirs où rien ne fonctionne du premier coup.

Si un fichier texte vous résiste encore ce soir, mon conseil tient en une phrase : vérifiez d'abord l'endroit exact où Python cherche, avant de remettre en cause tout votre code. C'est cette bascule, plus que n'importe quelle notion théorique, que ma formation Python m'a aidée à intégrer, une leçon courte à la fois.

Certains lecteurs me parlent aussi du JavaScript comme d'une possible suite, mais je ne suis pas la bonne personne pour conseiller un langage plutôt qu'un autre. Je raconte seulement mon chemin, celui d'une débutante restée fidèle à ses serpents pour l'instant. Ce que je n'ai toujours pas résolu, en revanche, c'est comment garder ma tisane chaude plus de dix minutes pendant que je débogue ; si quelqu'un a une astuce, elle est la bienvenue.

Articles connexes