Un vrai programme communique avec le monde extérieur : lire une configuration, enregistrer des résultats, importer des données utilisateurs. Python offre une API très simple pour travailler avec les fichiers — mais elle cache quelques pièges classiques que le TOSA teste régulièrement.
Ouvrir un fichier : open()
La fonction native open() renvoie un objet fichier qu'on peut lire, écrire ou fermer.
fichier = open(chemin, mode, encoding="utf-8")Les modes d'ouverture
| Mode | Effet | Si le fichier n'existe pas |
|---|---|---|
"r" |
Lecture seule (défaut) | Erreur FileNotFoundError |
"w" |
Écriture (écrase !) | Créé |
"a" |
Ajout (append) en fin | Créé |
"x" |
Création exclusive | Créé |
"r+" |
Lecture + écriture | Erreur |
"rb", "wb" |
Lecture/écriture en binaire |
L'encodage
Spécifiez toujours encoding="utf-8" pour les fichiers texte — c'est la norme universelle pour gérer les accents, caractères spéciaux, etc.
open("fichier.txt", "r", encoding="utf-8")Sans cet argument, Python utilise l'encodage système par défaut, ce qui crée des bugs d'affichage selon les plateformes (notamment avec les accents sur Windows).
Lire un fichier
Créons d'abord un fichier de test, puis lisons-le.
# Créer un fichier de test
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("Alice 14\nBob 8\nCharlie 17\nEve 15\n")
print("Fichier créé.")Lire tout d'un coup : read()
Renvoie toute la contenu du fichier comme une chaîne.
with open("notes.txt", "r", encoding="utf-8") as f:
contenu = f.read()
print(repr(contenu))Lire ligne par ligne : boucle sur le fichier
La méthode recommandée : itérer directement sur le fichier.
with open("notes.txt", "r", encoding="utf-8") as f:
for ligne in f:
print(repr(ligne))Obtenir toutes les lignes en liste : readlines()
with open("notes.txt", "r", encoding="utf-8") as f:
lignes = f.readlines()
print(lignes)Attention : readlines() charge toutes les lignes en mémoire. Pour un gros fichier, préférez itérer.
Récapitulatif des méthodes de lecture
| Méthode | Renvoie | Usage |
|---|---|---|
f.read() |
Chaîne complète | Petits fichiers |
f.read(n) |
n caractères |
Lecture contrôlée |
f.readline() |
Une ligne | Lecture manuelle |
f.readlines() |
Liste de toutes les lignes | Lecture complète |
for ligne in f: |
Itérateur ligne par ligne | Recommandé — efficace |
Écrire dans un fichier
write() — écrire une chaîne
with open("rapport.txt", "w", encoding="utf-8") as f:
f.write("Rapport du jour\n")
f.write("================\n")
f.write("Ventes : 1250 €\n")
f.write("Clients : 15\n")
# Vérifier le résultat
with open("rapport.txt", "r", encoding="utf-8") as f:
print(f.read())writelines() — écrire plusieurs lignes
Prend une séquence de chaînes. Attention : n'ajoute pas de \n entre elles non plus !
lignes = ["Alice 14\n", "Bob 8\n", "Charlie 17\n"]
with open("notes.txt", "w", encoding="utf-8") as f:
f.writelines(lignes)
with open("notes.txt", "r", encoding="utf-8") as f:
print(f.read())Mode ajout "a"
Pour ajouter à la fin sans écraser :
with open("rapport.txt", "a", encoding="utf-8") as f:
f.write("\nMise à jour 14h30\n")
f.write("Ventes : 1400 €\n")
with open("rapport.txt", "r", encoding="utf-8") as f:
print(f.read())Le context manager with
Vous l'avez vu dans tous les exemples. Le with garantit que le fichier est automatiquement fermé, même en cas d'erreur.
Sans with (à éviter)
# ❌ Approche verbeuse et risquée
f = open("fichier.txt", "r", encoding="utf-8")
try:
contenu = f.read()
finally:
f.close()Avec with (recommandé)
# ✅ Concis et sûr
with open("fichier.txt", "r", encoding="utf-8") as f:
contenu = f.read()
# f est automatiquement fermé à la sortie du bloc