Prépa Python

Avancé — chapitre 35 sur 54

Lire et écrire des fichiers

Fichiers texte, JSON, CSV, mode binaire, context manager with

75 minAbonnés

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.

python
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.

python
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.

python
# 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.

python
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.

python
with open("notes.txt", "r", encoding="utf-8") as f:
    for ligne in f:
        print(repr(ligne))

Obtenir toutes les lignes en liste : readlines()

python
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

python
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 !

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

python
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)

python
# ❌ Approche verbeuse et risquée
f = open("fichier.txt", "r", encoding="utf-8")
try:
    contenu = f.read()
finally:
    f.close()

Avec with (recommandé)

python
# ✅ 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

Suite réservée aux abonnés

Débloquez l'intégralité du parcours

Les 54 chapitres, les exercices corrigés automatiquement, les examens blancs et le suivi de votre progression.

Voir les offresChapitres en accès libre

Déjà un accès ? Connectez-vous.