Chapitre 3: Gestion des fichiers et
Automatisation des tâches
Module: Programmation Python | Filières IDS & GI, Semestre 3 | AU: 2025-2026
Gestion des fichiers en Python
1. Les Fondamentaux: 2. Gérer le Système de Fichiers
• Apprendre à ouvrir, lire, et • Découvrir les outils pour naviguer et
écrire des données de manière manipuler les dossiers et les fichiers.
fiable et efficace. • Nous comparerons l'approche
• Traiter les fichiers texte et le classique (os) à l'approche moderne
format JSON. (pathLib).
83
L'importance de la gestion des fichiers
Les fichiers sont essentiels pour :
• Persister les données au-delà de l'exécution du
programme
• Échanger des informations entre applications
• Stocker des configurations et des paramètres
• Enregistrer des logs et des résultats
• Traiter de grandes quantités de données
Python offre des outils puissants et simples pour manipuler les fichiers de
manière efficace et sécurisée.
84
Le Premier Contact: Ouvrir et Fermer un Fichier
La fonction open()
file = open("nom_fichier.txt", "mode", file = open("[Link]", "r")
encoding="utf-8") # …Opérations sur le fichier …
# …Opérations sur le fichier … [Link]()
[Link]()
Modes d'ouverture principaux
'r' : Lecture (read) - mode par défaut
'w' : Écriture (write) - écrase le contenu existant
'a' : Ajout (append) - ajoute à la fin
'x' : Création exclusive - échoue si le fichier existe
'b' : Mode binaire - à combiner avec les autres modes
'+' : Lecture et écriture
85
Le Premier Contact: Ouvrir et Fermer un Fichier
Modes d'ouverture principaux
Tableau récapitulatif
Mode Lecture Écriture Curseur initial Si fichier EXISTE Si fichier N'existe PAS
r ✓ ✗ Début Lecture normale FileNotFoundError
r+ ✓ ✓ Début Lecture/écriture FileNotFoundError
w ✗ ✓ Début Écrase tout Crée le fichier
w+ ✓ ✓ Début Écrase tout Crée le fichier
a ✗ ✓ Fin Ajoute à la fin Crée le fichier
a+ ✓ ✓ Fin Ajoute à la fin Crée le fichier
x ✗ ✓ Début FileExistsError Crée le fichier
86
Le Premier Contact: Ouvrir et Fermer un Fichier
La Méthode Classique La Bonne Pratique (Recommandée)
f = open() / f. close() with open( ... )
chemin = r"C:\Users\Documents\[Link]" chemin = r"C:\Users\Documents\[Link]"
# Ouvrir un fichier # Le gestionnaire de contexte 'with' garantit
f = open(chemin, "r") # la fermeture automatique du fichier.
with open(chemin, "r") as f:
# ...Opérations sur le f i c h i e r . . . # Le fichier est ouvert ici
pass
# Fermer un fichier (étape cruciale et facile # Le fichier est automatiquement fermé ici
à oublier)
[Link]()
Avantages
• Fermeture automatique du fichier, même
en cas d'erreur
Cette méthode requiert une gestion manuelle • Évite les fuites de ressources
de la fermeture du fichier, ce qui peut entraîner • Gérer plusieurs fichiers à la fois
des fuites de ressources si elle est omise.
with open(chemin, "r") as f1, open(chemin2,
"r") as f2:
87
Gestion des fichiers
Lire le contenu d’un fichier : Différentesfaçonsdelireunfichier
with open("[Link]", "r") as f: with open("[Link]", "r") as f:
# Lire tout le contenu # Lire toutes les lignes dans une liste
all = [Link]() # retourne un string lignes = [Link]() # retourne une liste
# Réinitialise le curseur au début (position 0) #['ligne1\n', 'ligne2\n', 'ligne3\n’,… ]
[Link](0) # Itérer ligne par ligne (recommandé)
# Lire une ligne [Link](0)
ligne = [Link]() # retourne un string for ligne in f:
# Lire la deuxième ligne print([Link]())
deuxieme_ligne = [Link]()
- readlines() conserve les sauts de ligne ("\n"). Pour une
- Appeler 'f. read()' une deuxième fois renverra une chaîne vide liste "propre", combinez "read()" et splitlines():
car le curseur est à la fin du fichier. Contenu = [Link]().splitlines()
- Utilisez 'f. seek(0)' pour le ramener au début. - Un objet fichier est itérable. On peut le parcourir
- Pour éviter les UnicodeDecodeError avec des caractères directement avec une boucle for.
spéciaux (accents, etc.), spécifiez toujours l'encodage.
with open(chemin, "r", encodinq= 'utf-8' ) as f:
Conseil : Pour les gros fichiers, privilégiez l'itération ligne par
ligne pour économiser la mémoire. 88
Gestion des fichiers
Ecriture dans des fichiers
# Écriture simple (écrase le contenu)
with open("[Link]", "w") as f:
[Link]("Première ligne\n")
[Link]("Deuxième ligne\n")
# Écriture multiple avec writelines()
lignes = ["Ligne 1\n", "Ligne 2\n", "Ligne 3\n"] # Avec write() - nécessite \n manuel
with open("[Link]", "w") as f: with open("test_write.txt", "w") as f:
[Link](lignes) [Link]("Ligne 1\n")
# Ajout à la fin d'un fichier [Link]("Ligne 2\n")
with open("[Link]", "a") as f:
[Link]("Nouvelle ligne ajoutée\n") # Avec print() - \n automatique
with open("test_print.txt", "w") as f:
print("Ligne 1", file=f)
print("Ligne 2", file=f)
- write() et writelines() n'ajoutent PAS automatiquement de
\n à la fin de chaque ligne.
- vous devez ajouter explicitement \n
89
Gestion des fichiers
Les fichiers JSON : Persistance des Données avec JSON
Pourquoi utiliser JSON ?
→ Pour sauvegarder des structures de données Python (listes,
dictionnaires) et les récupérer intactes, avec leur type
d'origine.
• Écrire en J S O N → [Link]()
• Lire depuis J S O N [Link]()
90
Gestion des fichiers
Lire et écrire dans un fichier JSON
Écrire e n J S O N ([Link] (objpython, fileJSON))
Convertit un objet Python en une chaîne de format JSON et l'écrit dans un
fichier.
{
import json
"idEtud": "250222",
data = {"idEtud": "250222",
"nom": "ALAMI",
"nom": "ALAMI",
"notes": [13,15,17]}
"notes": [
with open("[Link]", "w", 13,
encoding="utf-8") as f: 15,
# Convertit le dictionnaire data en 17
JSON et l'écrit dans le fichier ]
[Link](data, f, indent=4) }
91
Gestion des fichiers
Lire et écrire dans un fichier JSON
Lire depuis J S O N ([Link] (fileJSON))
Lire un fichier JSON et recréer l’objet Python correspondant.
import json
with open("[Link]", "r", encodinq='utf-8') as f:
contenu = [Link](f) >>> 'ALAMI’
print(contenu['nom’]) >>> <'class dict'>
print(type(contenu))
92
Gestion des fichiers
JSON: Bonne Pratiques et Pièges à Eviter
93
Gestion des fichiers
Lire et écrire dans un fichier JSON
D’après le script suivant, quel sera le contenu du fichier f ?
import json
# Premier écriture
data1 = {"nom": "Karim"} {
with open("[Link]", "w") as f: "nom": "Karim"
[Link](data1, f, indent=4) }{
"nom": "Ahmed"
# Deuxième écriture }
data2 = {"nom": "Ahmed"}
with open("[Link]", "a") as f:
[Link](data2, f, indent=4)
1. Deux objets JSON racines - le format JSON ne permet qu'un seul objet racine
Problèmes :
2. Syntaxe invalide - pas de séparation entre les objets
3. Impossible à lire avec [Link]() (data = [Link](f) # Erreur: JSONDecodeError )
94
Gestion des fichiers
Lire et écrire dans un fichier JSON
Solution 1 : Utiliser une liste comme conteneur principal
import json [
# Premier écriture - créer une liste {
data1 = {"nom": "Karim"}
"nom": "Karim"
with open("[Link]", "w") as f:
# Mettre dans une liste
},
[Link]([data1], f, indent=4) {
"nom": "Ahmed"
# Deuxième écriture - lire, modifier, réécrire }
data2 = {"nom": "Ahmed"} ]
with open("[Link]", "r") as f:
# Charger la liste existante
donnees = [Link](f)
# Ajouter le nouvel objet
[Link](data2)
with open("[Link]", "w") as f:
[Link](donnees, f, indent=4)
95
Gestion des fichiers
Lire et écrire dans un fichier JSON
Solution 2 : Utiliser un dictionnaire avec des clés uniques
import json {
"utilisateur1": {
# Premier écriture "nom": "Karim"
data1 = {"nom": "Karim"} },
with open("[Link]", "w") as f: "utilisateur2": {
[Link]({"utilisateur1": data1}, f,
"nom": "Ahmed"
indent=4)
}
# Deuxième écriture }
data2 = {"nom": "Ahmed"}
with open("[Link]", "r") as f:
donnees = [Link](f)
# Ajouter avec une nouvelle clé
donnees["utilisateur2"] = data2
with open("[Link]", "w") as f:
[Link](donnees, f, indent=4)
96
Du fichier à l’Ecosystème de fichiers
Comment créer des dossiers, lister des fichiers, construire des chemins et automatiser l'organisation
de nos tâches ?
Il existe différents modules (os, glob, shutil, pathlib) pour la
manipulation des chemins de fichiers et de dossiers, et pour
l’exécution de différentes opérations comme la création, la
recherche à l’intérieur d’une structure de dossier, etc…
Le Module 'os' : La Voie des Chaînes de Caractères Le Module 'pathtib': La Voie des Objets
Le module historique de Python pour L'approche moderne (Python
interagir avec le système d'exploitation. 3.4+). Ilreprésente les chemins
Il représente les chemins comme de comme des objets intelligents
simples chaînes de caractères ("str"). ("Path") dotés de Ieurs propres
méthodes. Plus intuitif et moins
Puissant, mais parfois limité.
sujet aux erreurs.
97
Du fichier à l’Ecosystème de fichiers
Comment créer des dossiers, lister des fichiers, construire des chemins et automatiser l'organisation
de nos tâches ?
La différence fondamentale entre os et pathlib
✓ Le module os représente les chemins sous forme de chaînes avec lesquelles
vous ne pouvez pas faire grand-chose.
✓ Le module pathlib représente les chemins comme des objets spéciaux avec
des méthodes et des attributs utiles.
98
Du fichier à l’Ecosystème de fichiers
99
Du fichier à l’Ecosystème de fichiers
La puissance de 'pathlib'
100
Du fichier à l’Ecosystème de fichiers
TRAVAUX PRATIQUES: L’automatisation en Action
101
Du fichier à l’Ecosystème de fichiers
TRAVAUX PRATIQUES: L’automatisation en Action
102
Du fichier à l’Ecosystème de fichiers
TRAVAUX PRATIQUES: L’automatisation en Action
103