Bonjour ! Dans la leçon précédente, nous avons maîtrisé les listes en compréhension, une technique Python puissante pour créer et transformer des listes de manière concise. Cette compétence est excellente pour manipuler des données qui sont déjà en mémoire. Mais que se passe-t-il lorsque nous devons travailler avec des données qui proviennent de sources externes ou lorsque nous voulons sauvegarder les résultats de notre programme pour une utilisation future ?
C'est là qu'intervient la gestion de fichiers. Dans le domaine du machine learning, presque tout commence par la lecture de données depuis un fichier (qu'il s'agisse d'un simple fichier texte, d'un CSV ou d'un autre format). De même, sauvegarder des résultats, des logs d'entraînement ou des configurations est une tâche quotidienne.
L'objectif de cette leçon est donc de vous apprendre à lire et écrire dans des fichiers texte. Nous verrons comment ouvrir des fichiers en toute sécurité, lire leur contenu de plusieurs manières, et y écrire ou y ajouter des informations.
1. Le Contexte de la Gestion de Fichiers : L'instruction with
La première étape pour interagir avec un fichier est de l'ouvrir. En Python, la fonction open() est utilisée à cette fin. Cependant, une règle fondamentale est qu'un fichier ouvert doit toujours être fermé une fois que vous avez terminé de l'utiliser. Oublier de fermer un fichier peut entraîner des fuites de ressources et des comportements inattendus.
Pour éviter ce problème, Python propose une syntaxe élégante et sûre : l'instruction with, qui garantit que le fichier sera automatiquement fermé, même en cas d'erreur.
with open('mon_fichier.txt', 'r') as file:
# Le code pour travailler avec le fichier se place ici
# Le fichier est ouvert à l'intérieur de ce bloc
# Une fois sorti du bloc "with", le fichier est automatiquement et proprement fermé.
C'est la méthode que nous utiliserons systématiquement. C'est ce qu'on appelle une "bonne pratique" (best practice) en Python.
Learn Python in Arabic #065 - Files Handling Part One Intro
Pour commencer, je vous propose de regarder cette vidéo de la chaîne Elzero Web School, que vous appréciez. Elle introduit les bases de la gestion de fichiers en arabe.
Regardez l'intégralité de la vidéo introduction aux fichiers. Elle couvre la raison d'être de la gestion de fichiers, comment en créer, et les modes fondamentaux que nous allons détailler juste après.
2. Les Modes d'Ouverture : 'r', 'w', et 'a'
Lorsque vous ouvrez un fichier avec open(), le deuxième argument est une chaîne de caractères qui spécifie le "mode" d'ouverture. Ce mode indique à Python ce que vous avez l'intention de faire avec le fichier. Les trois modes de base sont :
'r'(Read - Lecture) : Ouvre un fichier pour le lire. C'est le mode par défaut. Si le fichier n'existe pas, Python lèvera une erreur.'w'(Write - Écriture) : Ouvre un fichier pour y écrire. Attention : si le fichier existe déjà, son contenu sera entièrement effacé (écrasé) ! S'il n'existe pas, il sera créé.'a'(Append - Ajout) : Ouvre un fichier pour y ajouter du contenu à la fin. Si le fichier existe, le nouveau contenu sera ajouté après le contenu existant, sans rien effacer. S'il n'existe pas, il sera créé.
La vidéo suivante de Socratica résume très bien l'utilisation de ces modes.
Text Files in Python || Python Tutorial || Learn Python Programming
Cette vidéo explique de manière très claire comment ouvrir, lire, écrire et ajouter du contenu à des fichiers.
Pour comprendre l'ouverture et la lecture sécurisée, regardez le segment sur la méthode with. Ensuite, visionnez la partie sur le mode écriture ('w'), qui insiste sur le risque d'écrasement. Enfin, regardez comment le mode ajout ('a') résout ce problème en ajoutant des données à la fin.
Pour visualiser la décision à prendre, ce diagramme est très utile :

Python offre également des modes combinés qui permettent la lecture et l'écriture simultanées (r+, w+, a+).

3. Lire le Contenu d'un Fichier
Une fois un fichier ouvert en mode lecture ('r'), il existe plusieurs façons de lire son contenu.
Itérer Ligne par Ligne (La Méthode Recommandée)
La manière la plus "Pythonique" et la plus efficace en termes de mémoire, surtout pour les gros fichiers, est d'itérer directement sur l'objet fichier dans une boucle for.
# Supposons que nous ayons un fichier 'data.txt' avec plusieurs lignes.
try:
with open('data.txt', 'r') as f:
print("Lecture ligne par ligne :")
for line in f:
# La méthode .strip() enlève les espaces et sauts de ligne en début/fin de chaîne
print(line.strip())
except FileNotFoundError:
print("Le fichier 'data.txt' n'a pas été trouvé.")
Chaque line contient le caractère de saut de ligne (\n) à la fin, c'est pourquoi nous utilisons souvent .strip() pour le nettoyer.
Autres Méthodes de Lecture
.read(): Lit l'intégralité du fichier et retourne son contenu sous forme d'une seule chaîne de caractères. Attention, cela peut consommer beaucoup de mémoire pour de très gros fichiers..readlines(): Lit toutes les lignes du fichier et les retourne sous forme d'une liste de chaînes de caractères. Chaque chaîne de la liste se termine par\n.
Cette dernière méthode, .readlines(), se combine très bien avec les listes en compréhension que nous avons apprises !
# Combiner .readlines() et une liste en compréhension pour nettoyer les lignes
try:
with open('data.txt', 'r') as f:
lines_cleaned = [line.strip() for line in f.readlines()]
print("\nListe des lignes nettoyées :")
print(lines_cleaned)
except FileNotFoundError:
print("Le fichier 'data.txt' n'a pas été trouvé.")
Reading and Writing Files in Python (Guide)
L'article de Real Python est une ressource très complète sur le sujet. Cette section détaille les différentes méthodes de lecture.
Concentrez-vous sur la section intitulée Reading and Writing Opened Files. Elle compare .read(), .readline(), .readlines() et l'itération directe, en expliquant pourquoi cette dernière est souvent la meilleure approche.
4. Écrire dans un Fichier
Pour écrire, nous utilisons les modes 'w' ou 'a'.
La Méthode .write()
La méthode .write() écrit une chaîne de caractères dans le fichier. Il est important de noter qu'elle n'ajoute pas de saut de ligne. Vous devez l'ajouter manuellement avec \n si vous voulez que les écritures suivantes apparaissent sur une nouvelle ligne.
lines_to_write = ["Première ligne.", "Deuxième ligne.", "Troisième ligne."]
# Utilisation du mode 'w' : attention, cela efface le fichier s'il existe.
with open('output.txt', 'w') as f:
for line in lines_to_write:
f.write(line + '\n') # On ajoute manuellement le saut de ligne
print("Le fichier 'output.txt' a été créé/écrasé.")
Ajouter du Contenu avec le Mode 'a'
Si vous voulez ajouter des informations à un fichier existant, comme pour un fichier de log, utilisez le mode 'a'.
# Utilisation du mode 'a' pour ajouter du contenu.
with open('output.txt', 'a') as f:
f.write("Ceci est une ligne ajoutée.\n")
print("Une ligne a été ajoutée à 'output.txt'.")
Reading and Writing Files in Python (Guide)
Revenons à l'article de Real Python pour voir les méthodes d'écriture en action.
Lisez la sous-section sur l'écriture de fichiers qui présente .write() et .writelines(). Juste après, parcourez la section Appending to a File pour bien comprendre le mode 'a'.
5. Introduction à la Gestion des Erreurs
Que se passe-t-il si vous essayez de lire un fichier qui n'existe pas ? Votre programme plantera avec une erreur FileNotFoundError. C'est un cas très courant. La bonne pratique est d'anticiper ces erreurs.
Nous dédierons la prochaine leçon entièrement à la gestion des erreurs, mais voici un avant-goût avec le bloc try...except.
try:
with open('fichier_inexistant.txt', 'r') as f:
print(f.read())
except FileNotFoundError:
print("Erreur : Le fichier n'a pas été trouvé. Le programme continue.")
Le code dans le bloc try est exécuté. Si une FileNotFoundError se produit, au lieu de planter, le programme saute au bloc except et exécute son code.
Text Files in Python || Python Tutorial || Learn Python Programming
La vidéo de Socratica a un excellent segment qui illustre précisément ce point.
Regardez la partie qui montre comment gérer l'erreur FileNotFoundError à l'aide d'un bloc try...except.
6. Exercices Pratiques
Maintenant, à vous de jouer !
Créez un fichier mon_journal.txt dans le même dossier que votre script Python et copiez-y le texte suivant :
Ligne 1 : beaucoup d'espaces au début et à la fin.
Ligne 2 : une ligne normale.
Ligne 3 : encore des espaces.
Ligne 4
Exercice 1 : Nettoyer et Réécrire
Écrivez un script Python qui :
- Lit le fichier
mon_journal.txt. - Crée une nouvelle liste contenant chaque ligne, mais nettoyée de tous les espaces superflus au début et à la fin (utilisez
.strip()). - Écrit ces lignes nettoyées dans un nouveau fichier appelé
journal_propre.txt. Chaque ligne doit être sur une nouvelle ligne.
Exercice 2 : Journalisation Simple
Écrivez une fonction log(message) qui :
- Prend une chaîne de caractères
messageen argument. - Ouvre un fichier
app.logen mode ajout ('a'). - Écrit le message dans le fichier, suivi d'un saut de ligne.
- Appelez cette fonction plusieurs fois avec des messages différents et vérifiez le contenu de
app.log.
Solutions
Solution de l'exercice 1 :
# Créez d'abord le fichier mon_journal.txt
try:
with open('mon_journal.txt', 'r') as reader:
# On utilise une liste en compréhension pour lire et nettoyer en une seule étape !
cleaned_lines = [line.strip() for line in reader.readlines()]
with open('journal_propre.txt', 'w') as writer:
for line in cleaned_lines:
writer.write(line + '\n')
print("Le fichier 'journal_propre.txt' a été créé avec le contenu nettoyé.")
except FileNotFoundError:
print("Assurez-vous que le fichier 'mon_journal.txt' existe.")
Solution de l'exercice 2 :
def log(message):
# Le mode 'a' crée le fichier s'il n'existe pas, ou ajoute du contenu s'il existe.
with open('app.log', 'a') as logger:
logger.write(message + '\n')
# Appels de la fonction
log("Démarrage de l'application.")
log("Traitement des données en cours...")
log("Traitement terminé avec succès.")
print("Les messages ont été ajoutés à 'app.log'.")
Conclusion
Félicitations ! Vous savez maintenant comment interagir avec le système de fichiers pour lire et écrire des données, une compétence absolument indispensable pour tout projet de science des données ou de machine learning.
Points clés à retenir :
- Utilisez toujours l'instruction
with open(...)pour garantir que les fichiers sont fermés correctement. - Choisissez le bon mode :
'r'pour lire,'w'pour écraser et écrire,'a'pour ajouter à la fin. - Pour lire un fichier, l'itération ligne par ligne (
for line in file:) est la méthode la plus efficace. - La méthode
.write()n'ajoute pas de sauts de ligne ; vous devez les ajouter manuellement avec\n. - Anticipez les erreurs comme
FileNotFoundErroravectry...exceptpour rendre vos programmes plus robustes.
Dans la prochaine leçon, nous approfondirons ce dernier point et explorerons en détail le système de gestion des exceptions de Python. Vous apprendrez à gérer différents types d'erreurs pour créer des applications qui ne plantent pas au moindre imprévu.