Manipuler des fichiers, c'est une des premières choses à maîtriser quand tu travailles en Python sur des vrais projets. Lire un fichier de config, écrire des logs, copier des données, gérer du stockage temporaire ou chercher des fichiers donc tout développeur Python tombe sur ces tâches chaque jour.
Dans ce guide, on couvre 20 opérations sur les fichiers en Python, des bases (lecture, écriture) aux patterns plus avancés (fichiers temporaires, recherche par motif, copie de répertoire, gestion d'erreurs).
Si tu travailles avec les APIs HTTP ou Pandas, voir aussi Python : Manipulating HTTP APIs.
Quelle fonction pour quel besoin ?
| Besoin | Fonction | Module |
|---|---|---|
| Lire un fichier entier | read() |
open() natif |
| Lire ligne par ligne | itération ou readlines() |
open() natif |
| Lire une ligne précise | getline() |
linecache |
| Écrire ou écraser | write() en mode 'w' |
open() natif |
| Ajouter à la fin | write() en mode 'a' |
open() natif |
| Lire ou écrire du binaire | mode 'rb' / 'wb' |
open() natif |
| Renommer un fichier | rename() |
os |
| Copier un fichier | lecture/écriture ou copy() |
shutil |
| Déplacer un fichier | move() |
shutil |
| Supprimer un fichier | remove() |
os |
| Vérifier l'existence | path.exists() |
os |
| Fichier ou dossier ? | path.isfile() / path.isdir() |
os |
| Lister un répertoire | listdir() |
os |
| Copier un répertoire | copytree() |
shutil |
| Chercher par motif | glob() |
glob |
| Récupérer les infos | stat() |
os |
| Modifier les permissions | chmod() |
os |
| Fichier temporaire | TemporaryFile() |
tempfile |
| Gérer les erreurs | try / except |
natif |
1. Lire des fichiers
Lire le contenu complet d'un fichier
Le cas le plus simple : tu charges tout le contenu dans une chaîne avec read(). Le with ferme automatiquement le fichier même si une erreur survient.
with open('exemple.txt', 'r') as fichier:
contenu = fichier.read()
print(contenu)
Lire toutes les lignes dans une liste
Quand tu as besoin de traiter le fichier ligne par ligne et de garder toutes les lignes en mémoire, utilise readlines() pour obtenir une liste Python :
with open('exemple.txt', 'r') as fichier:
lignes = fichier.readlines()
print(lignes)
Chaque ligne garde son caractère \n final. Utilise ligne.strip() si tu veux le retirer.
Itérer ligne par ligne sans charger tout en mémoire
Si tu veux juste parcourir les lignes sans toutes les garder, itère directement sur l'objet fichier. C'est beaucoup plus économe en mémoire pour les gros fichiers :
with open('exemple.txt', 'r') as fichier:
for ligne in fichier:
print(ligne.strip())
Lire une ligne précise avec linecache
Si tu veux récupérer une seule ligne d'un fichier sans tout lire, le module linecache fait ça très bien :
import linecache
ligne = linecache.getline('exemple.txt', 3)
print(f'Troisième ligne : {ligne}')
linecache met le fichier en cache, donc les appels répétés sur le même fichier sont rapides. Utilise linecache.clearcache() pour libérer la mémoire quand tu as fini.
Lire et écrire des fichiers binaires
Pour les images, vidéos, PDF ou tout autre contenu non textuel, ouvre le fichier en mode binaire avec 'rb' (read binary) ou 'wb' (write binary). Le contenu est en bytes, pas en string :
# Lecture d'un fichier binaire
with open('image.jpg', 'rb') as fichier:
contenu = fichier.read()
# Écriture d'un fichier binaire
with open('copie.jpg', 'wb') as fichier:
fichier.write(contenu)
N'ouvre jamais du contenu binaire en mode texte, tu vas avoir des erreurs d'encodage ou des fichiers corrompus.
2. Écrire et ajouter dans des fichiers
Écrire dans un fichier
Mode 'w' pour écrire ou écraser. Si le fichier n'existe pas, il est créé. S'il existe, son contenu est remplacé :
with open('exemple.txt', 'w') as fichier:
fichier.write('Hello, Python !')
Ajouter à la fin d'un fichier
Mode 'a' pour ajouter du contenu à la fin d'un fichier existant sans écraser. C'est le mode standard pour les logs :
with open('exemple.txt', 'a') as fichier:
fichier.write('\nNouvelle ligne ajoutée.')
Écrire une liste de lignes dans un fichier
Pour écrire chaque élément d'une liste sur une nouvelle ligne, itère et ajoute un caractère de fin de ligne :
lignes = ['Première ligne', 'Deuxième ligne', 'Troisième ligne']
with open('exemple.txt', 'w') as fichier:
for ligne in lignes:
fichier.write(f'{ligne}\n')
Alternative plus concise : fichier.writelines(lignes), mais tu dois ajouter \n à chaque élément toi-même.
Travailler avec plusieurs fichiers dans un seul with
Tu peux ouvrir plusieurs fichiers dans le même with, ça garde le code propre et toutes les fermetures sont gérées automatiquement :
with open('source.txt', 'r') as source, open('destination.txt', 'w') as destination:
contenu = source.read()
destination.write(contenu)
Créer plusieurs fichiers dynamiquement
Quand tu dois générer plein de fichiers (un par enregistrement, par jour, par utilisateur), boucle sur une liste et ouvre chacun :
noms_fichiers = ['fichier1.txt', 'fichier2.txt', 'fichier3.txt']
for nom in noms_fichiers:
with open(nom, 'w') as fichier:
fichier.write(f"Contenu pour {nom}")
Créer un fichier temporaire
Pour les données qui ne doivent pas survivre au programme, utilise le module tempfile. Le fichier est supprimé automatiquement à la fermeture :
import tempfile
with tempfile.TemporaryFile(mode='w+') as fichier_temp:
fichier_temp.write('Donnée temporaire')
fichier_temp.seek(0)
print(fichier_temp.read())
Les fichiers temporaires sont utiles pour mettre en cache des calculs intermédiaires, passer des données entre processus ou pour les tests unitaires.
3. Gérer les fichiers (renommer, copier, déplacer, supprimer)
Renommer un fichier
os.rename() pour renommer ou déplacer dans le même système de fichiers :
import os
os.rename('ancien_fichier.txt', 'nouveau_fichier.txt')
Si la destination est sur un autre système de fichiers, utilise shutil.move() à la place (voir plus bas).
Copier un fichier
La copie la plus simple lit la source et écrit son contenu dans un nouveau fichier :
with open('source.txt', 'r') as source, open('destination.txt', 'w') as dest:
contenu = source.read()
dest.write(contenu)
Pour une copie qui préserve les métadonnées (timestamps, permissions), utilise shutil.copy2() :
import shutil
shutil.copy2('source.txt', 'destination.txt')
Déplacer un fichier
shutil.move() déplace un fichier. Contrairement à os.rename, ça marche entre systèmes de fichiers :
import shutil
shutil.move('ancien_emplacement/fichier.txt', 'nouvel_emplacement/fichier.txt')
La fonction renvoie le chemin du nouvel emplacement. Si le répertoire de destination n'existe pas, tu vas avoir une erreur.
Supprimer un fichier en sécurité
Vérifie toujours que le fichier existe avant de supprimer pour éviter une FileNotFoundError :
import os
if os.path.exists('exemple.txt'):
os.remove('exemple.txt')
print('Fichier supprimé.')
else:
print("Le fichier n'existe pas.")
Attention : os.remove() est définitif, ça ne passe pas par la corbeille.
4. Travailler avec les répertoires
Vérifier si un fichier ou un chemin existe
os.path.exists() marche pour n'importe quel chemin, fichier ou répertoire :
import os
if os.path.exists('exemple.txt'):
print('Le fichier existe.')
else:
print("Le fichier n'existe pas.")
Savoir si c'est un fichier ou un répertoire
os.path.isfile() et os.path.isdir() sont plus précis que exists() :
import os
chemin = 'exemple.txt'
if os.path.isfile(chemin):
print(f'{chemin} est un fichier.')
elif os.path.isdir(chemin):
print(f'{chemin} est un répertoire.')
else:
print(f"{chemin} n'existe pas.")
Lister les fichiers d'un répertoire
os.listdir() retourne toutes les entrées (fichiers et dossiers) d'un répertoire :
import os
fichiers = os.listdir('.')
print(fichiers)
Le '.' désigne le répertoire courant. Pour des besoins plus avancés (récursif, filtré), utilise os.walk() ou glob (voir ci-dessous).
Copier un répertoire et son contenu
Pour dupliquer une arborescence entière, utilise shutil.copytree() :
import shutil
shutil.copytree('repertoire_source', 'repertoire_destination', dirs_exist_ok=True)
Le paramètre dirs_exist_ok=True (Python 3.8+) permet de copier dans un répertoire existant sans lever d'erreur.
Chercher des fichiers par motif avec glob
Le module glob permet de trouver des fichiers qui matchent un motif (typiquement par extension) :
import glob
# Tous les fichiers Python d'un répertoire
fichiers_python = glob.glob('chemin/*.py')
print(fichiers_python)
# Recherche récursive dans les sous-répertoires
tous_les_py = glob.glob('chemin/**/*.py', recursive=True)
Le wildcard ** combiné avec recursive=True traverse tous les sous-répertoires.
5. Infos, permissions et gestion d'erreurs
Récupérer les infos d'un fichier
os.stat() retourne les métadonnées : taille, permissions, date de modification, propriétaire :
import os
infos = os.stat('exemple.txt')
print(f"Taille : {infos.st_size} octets")
print(f"Dernière modification : {infos.st_mtime}")
st_mtime est un timestamp Unix. Pour le convertir en date lisible : datetime.fromtimestamp(infos.st_mtime).
Modifier les permissions d'un fichier
os.chmod() modifie les permissions avec la notation octale, la même syntaxe que la commande Unix chmod :
import os
os.chmod('exemple.txt', 0o600) # Le propriétaire a les droits lecture et écriture
Valeurs courantes :
0o644: propriétaire lecture/écriture, autres lecture seule0o755: propriétaire tout, autres lecture et exécution0o600: propriétaire seul, aucun accès pour les autres
Gérer les exceptions sur fichier
Les opérations sur fichier peuvent échouer pour plein de raisons : fichier manquant, permission refusée, disque plein. Encapsule dans un try / except :
try:
with open('fichier_inexistant.txt', 'r') as fichier:
contenu = fichier.read()
except FileNotFoundError:
print("Fichier introuvable.")
except PermissionError:
print("Permission refusée.")
except IsADirectoryError:
print("C'est un répertoire, pas un fichier.")
Attrape toujours des exceptions précises plutôt qu'un except: générique, ça évite de cacher des bugs.
Aller plus loin : pratiquer Python
Manipuler les fichiers, c'est la base, mais la vraie compétence Python vient avec la pratique. Sur DataCertification.fr, le Python Lab propose 300+ exercices interactifs sur la manipulation de données, les fichiers, pandas, NumPy et la POO. Tout tourne directement dans le navigateur.
👉 Pratiquer Python sur DataCertification.fr
Tu veux que je t'accompagne sur ton projet data (automatisation Python, pipelines, Snowflake, dbt) ?
👉 Réserver un appel de 30 minutes
Questions
Comment lire un fichier en Python ?
Utilise la fonction open() en mode lecture 'r', combinée avec un with pour gérer le contexte du fichier proprement. Exemple : with open('fichier.txt', 'r') as f: contenu = f.read(). Pour lire ligne par ligne, itère directement sur l'objet fichier ou utilise readlines() pour obtenir une liste.
Quelle différence entre le mode 'w' et 'a' dans open() ?
Mode 'w' (write) ouvre le fichier et écrase tout contenu existant. Si le fichier n'existe pas, il est créé. Mode 'a' (append) ouvre le fichier en écriture mais conserve le contenu existant et ajoute à la fin. Utilise 'w' pour repartir de zéro, 'a' pour étendre un fichier existant comme un fichier de log.
Comment vérifier si un fichier existe en Python ?
Utilise os.path.exists(chemin) pour vérifier si un chemin existe. Utilise os.path.isfile(chemin) pour vérifier spécifiquement qu'un chemin pointe vers un fichier (pas un répertoire). Les deux retournent True ou False. Vérifie toujours avant de faire une lecture ou une suppression pour éviter les FileNotFoundError.
Comment copier un fichier en Python ?
Utilise shutil.copy(source, destination) pour une copie simple qui préserve le contenu. Pour une copie avec les métadonnées (permissions, timestamps), utilise shutil.copy2(). Pour copier une arborescence entière, utilise shutil.copytree().
Comment déplacer un fichier en Python ?
Utilise shutil.move(source, destination) depuis le module shutil. Ça marche entre différents systèmes de fichiers (contrairement à os.rename qui ne marche que sur le même système). La fonction retourne le chemin du nouvel emplacement. Si le répertoire de destination n'existe pas, ça lève une erreur.
Comment supprimer un fichier en sécurité en Python ?
Utilise os.remove(chemin) pour supprimer un fichier. Pour le faire en sécurité, vérifie d'abord avec os.path.exists() pour éviter une FileNotFoundError. Pour les répertoires, utilise os.rmdir() pour les vides ou shutil.rmtree() pour supprimer un dossier et tout son contenu récursivement.
Comment lister tous les fichiers d'un répertoire en Python ?
Utilise os.listdir(chemin) pour obtenir une liste de toutes les entrées (fichiers et dossiers) d'un répertoire. Pour filtrer uniquement les fichiers qui matchent un motif (par exemple tous les .py), utilise glob.glob('chemin/.py'). Pour une recherche récursive dans les sous-répertoires, utilise glob.glob('chemin/**/.py', recursive=True) ou os.walk().
Comment lire un fichier binaire en Python ?
Ouvre le fichier en mode binaire avec 'rb' pour la lecture ou 'wb' pour l'écriture. Exemple : with open('image.jpg', 'rb') as f: donnees = f.read(). Le mode binaire retourne des bytes au lieu de strings. Utilise-le pour les images, vidéos, exécutables, PDF et tout fichier non textuel.
Comment gérer les erreurs sur fichier en Python ?
Encapsule tes opérations sur fichier dans un try / except. L'exception la plus commune est FileNotFoundError. Exemple : try: with open('fichier.txt', 'r') as f: contenu = f.read() except FileNotFoundError: print('Fichier introuvable'). Autres exceptions courantes : PermissionError quand l'accès est refusé et IsADirectoryError quand on passe un chemin de répertoire comme fichier.

