Lire et écrire un fichier en Python
Savoir lire un fichier en Python — et écrire dedans — est indispensable dès qu’un programme doit conserver des données : logs, configurations, exports, sauvegardes. Python rend ces opérations simples et sûres. Ce guide couvre de façon exhaustive chaque cas courant : la fonction open, le bloc with, les différents modes, les méthodes de lecture et d’écriture, les formats CSV et JSON, la gestion des chemins avec pathlib et le traitement des erreurs.
Ouvrir un fichier avec open et with
La fonction open() ouvre un fichier ; le bloc with garantit sa fermeture automatique, même en cas d’erreur. C’est la manière recommandée.
with open("notes.txt", "r", encoding="utf-8") as fichier:
contenu = fichier.read()
print(contenu)
# le fichier est fermé automatiquement à la sortie du bloc
Précisez toujours encoding="utf-8" pour éviter les problèmes d’accents. Sans with, il faudrait appeler fichier.close() manuellement, ce qu’on oublie facilement.
Les modes d’ouverture
Le deuxième argument de open() indique ce qu’on veut faire.
"r": lecture seule (par défaut). Erreur si le fichier n’existe pas."w": écriture. Écrase le contenu existant, crée le fichier au besoin."a": ajout (append). Écrit à la fin sans effacer l’existant."x": création exclusive. Erreur si le fichier existe déjà."r+": lecture et écriture.- Ajoutez
"b"(ex."rb","wb") pour le mode binaire (images, PDF).
# Écrase tout
with open("journal.txt", "w", encoding="utf-8") as f:
f.write("Nouvelle journée\n")
# Ajoute à la suite
with open("journal.txt", "a", encoding="utf-8") as f:
f.write("Ligne supplémentaire\n")
Attention au mode "w" : il vide le fichier dès l’ouverture. Utilisez "a" si vous voulez conserver le contenu.
Lire un fichier : read, readline, readlines
Plusieurs méthodes selon le besoin.
with open("notes.txt", "r", encoding="utf-8") as f:
tout = f.read() # tout le contenu en une seule chaîne
with open("notes.txt", "r", encoding="utf-8") as f:
ligne = f.readline() # la première ligne seulement
with open("notes.txt", "r", encoding="utf-8") as f:
lignes = f.readlines() # liste de toutes les lignes
# ['ligne 1\n', 'ligne 2\n', ...]
Pour les gros fichiers, la méthode la plus efficace est d’itérer directement, ligne par ligne, sans tout charger en mémoire :
with open("gros_fichier.txt", "r", encoding="utf-8") as f:
for ligne in f:
print(ligne.strip()) # strip() enlève le \n final
strip() supprime les espaces et sauts de ligne en bordure. Le résultat de la lecture est souvent une liste, que vous pouvez traiter comme n’importe quelle liste Python.
Écrire dans un fichier : write et writelines
lignes = ["pomme", "banane", "cerise"]
with open("fruits.txt", "w", encoding="utf-8") as f:
f.write("Liste de courses\n")
for fruit in lignes:
f.write(fruit + "\n")
# Ou d'un coup avec writelines (n'ajoute pas les \n automatiquement)
with open("fruits.txt", "w", encoding="utf-8") as f:
f.writelines(f"{fruit}\n" for fruit in lignes)
write n’ajoute pas de saut de ligne : pensez à "\n" vous-même. writelines écrit une séquence de chaînes sans séparateur non plus.
Lire et écrire un fichier CSV
Le module csv gère proprement les fichiers tabulaires (séparateurs, guillemets).
import csv
# Écriture
with open("contacts.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["nom", "email"])
writer.writerow(["Alice", "[email protected]"])
writer.writerow(["Bob", "[email protected]"])
# Lecture
with open("contacts.csv", "r", newline="", encoding="utf-8") as f:
reader = csv.reader(f)
for ligne in reader:
print(ligne) # ['nom', 'email'], puis ['Alice', ...]
Pour manipuler chaque ligne comme un dictionnaire (clé = en-tête), utilisez csv.DictReader et csv.DictWriter :
import csv
with open("contacts.csv", "r", newline="", encoding="utf-8") as f:
for ligne in csv.DictReader(f):
print(ligne["nom"], "-", ligne["email"])
Le paramètre newline="" évite les lignes vides parasites sous Windows : ne l’oubliez pas avec le module csv.
Lire et écrire un fichier JSON
Le module json convertit entre objets Python (dictionnaires, listes) et texte JSON.
import json
donnees = {
"nom": "Alice",
"age": 30,
"langages": ["Python", "JavaScript"],
}
# Écrire du JSON dans un fichier
with open("profil.json", "w", encoding="utf-8") as f:
json.dump(donnees, f, indent=2, ensure_ascii=False)
# Lire du JSON depuis un fichier
with open("profil.json", "r", encoding="utf-8") as f:
charge = json.load(f)
print(charge["nom"]) # Alice
print(charge["langages"]) # ['Python', 'JavaScript']
indent=2 rend le fichier lisible et ensure_ascii=False conserve les accents. Pour convertir vers/depuis une chaîne (et non un fichier), utilisez json.dumps et json.loads.
Gérer les chemins avec pathlib
Le module pathlib offre une façon moderne et portable de manipuler les chemins, indépendamment du système d’exploitation.
from pathlib import Path
dossier = Path("data")
fichier = dossier / "notes.txt" # concaténation propre
print(fichier.exists()) # le fichier existe-t-il ?
print(fichier.name) # notes.txt
print(fichier.suffix) # .txt
print(fichier.parent) # data
dossier.mkdir(exist_ok=True) # crée le dossier s'il manque
# pathlib lit et écrit directement
fichier.write_text("Bonjour\n", encoding="utf-8")
print(fichier.read_text(encoding="utf-8"))
L’opérateur / remplace les concaténations à base de \ ou /, ce qui évite les bugs entre Windows, macOS et Linux. write_text et read_text sont des raccourcis pratiques pour les petits fichiers.
Gérer les erreurs
L’accès aux fichiers peut échouer : fichier absent, permissions insuffisantes. Encadrez avec try / except.
try:
with open("inexistant.txt", "r", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("Le fichier n'existe pas.")
except PermissionError:
print("Accès refusé.")
except OSError as e:
print(f"Erreur d'entrée/sortie : {e}")
Interceptez des exceptions précises (FileNotFoundError, PermissionError) plutôt qu’un except générique : votre programme réagira de façon adaptée. Vérifier Path(...).exists() avant d’ouvrir peut aussi éviter certains cas d’erreur.
Conclusion
Vous savez désormais lire et écrire des fichiers en Python dans tous les cas de figure : open et with, les modes r/w/a, les méthodes read, readlines et write, les formats CSV et JSON, la gestion des chemins avec pathlib et le traitement des erreurs. Ces compétences ouvrent la porte à l’automatisation : sauvegarde de données, génération de rapports, traitement de logs.