Intermédiaire40 min30 XP
Objectifs de cette leçon
- Ouvrir et lire un fichier
- Écrire dans un fichier
- Utiliser le context manager with
Manipulation de fichiers 📁
Pourquoi manipuler des fichiers ? 🤔
Les programmes travaillent avec des donnees. Les fichiers permettent de :
- Lire des donnees sauvegardees
- Ecrire des resultats pour les conserver
- Traiter de grands volumes de donnees
💡 Sans fichiers, les donnees seraient perdues a la fermeture du programme !
Ouvrir un fichier avec open() 🚪
fichier = open("data.txt", "r")
| Mode | Description | Cree le fichier ? |
|---|---|---|
"r" | Lecture seule (par defaut) | ❌ Non (erreur si inexistant) |
"w" | Ecriture (ecrase le fichier) | ✅ Oui |
"a" | Ajout (append) en fin de fichier | ✅ Oui |
"x" | Creation exclusive (erreur si existe) | ✅ Oui |
"r+" | Lecture + ecriture | ❌ Non |
"w+" | Ecriture + lecture (ecrase) | ✅ Oui |
"a+" | Ajout + lecture | ✅ Oui |
Le with statement — la bonne methode ✅
# BONNE pratique with open("bonjour.txt", "w") as f: f.write("Hello World !") # Le fichier est automatiquement FERME ici
💡
withgarantit la fermeture du fichier meme en cas d'erreur. Utilise-le TOUJOURS.
Lire un fichier 📖
Methode 1 : read() — tout d'un coup
with open("data.txt", "r") as f: contenu = f.read() print(contenu)
Methode 2 : readline() — ligne par ligne
with open("data.txt", "r") as f: ligne1 = f.readline() ligne2 = f.readline()
Methode 3 : readlines() — toutes les lignes
with open("data.txt", "r") as f: lignes = f.readlines() for ligne in lignes: print(ligne.strip())
Methode 4 : Iterer directement ✨
# La plus efficace pour les gros fichiers with open("data.txt", "r") as f: for ligne in f: print(ligne.strip())
💡 La methode 4 est la plus efficace en memoire car elle ne charge pas tout le fichier d'un coup.
Ecrire dans un fichier ✏️
# "w" ecrase le fichier existant with open("output.txt", "w") as f: f.write("Premiere ligne\n") f.write("Deuxieme ligne\n") # "a" ajoute a la fin (ne ecrase pas) with open("output.txt", "a") as f: f.write("Troisieme ligne\n")
Chemins de fichiers 🗺️
import os # Chemin relatif with open("data/fichier.txt", "r") as f: pass # Chemin absolu with open("/home/user/documents/fichier.txt", "r") as f: pass # Verifier si un fichier existe if os.path.exists("data.txt"): print("Le fichier existe !") # Lister les fichiers fichiers = os.listdir(".") print(fichiers) # Chemin courant print(os.getcwd())
💡 Utilise
os.path.join()pour des chemins compatibles tous systemes :
import os chemin = os.path.join("dossier", "sous_dossier", "fichier.txt")
Manipuler le CSV 📊
import csv # Ecrire un CSV donnees = [ ["Nom", "Age", "Ville"], ["Alice", 25, "Paris"], ["Bob", 30, "Lyon"], ["Charlie", 22, "Marseille"] ] with open("etudiants.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(donnees) # Lire un CSV with open("etudiants.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) en_tete = next(reader) for ligne in reader: print(f"{ligne[0]} a {ligne[1]} ans, habite a {ligne[2]}")
CSV avec dictionnaires
import csv with open("etudiants.csv", "r", encoding="utf-8") as f: reader = csv.DictReader(f) for row in reader: print(f"{row['Nom']} → {row['Ville']}")
Manipuler le JSON 🌐
import json # Ecrire du JSON donnee = { "nom": "Alice", "age": 25, "competences": ["Python", "SQL", "Git"] } with open("profil.json", "w", encoding="utf-8") as f: json.dump(donnee, f, indent=2, ensure_ascii=False) # Lire du JSON with open("profil.json", "r", encoding="utf-8") as f: charge = json.load(f) print(charge["nom"]) # "Alice"
Conversion Python ↔ JSON
| Python → JSON | JSON → Python |
|---|---|
dict | dict |
list | list |
str | str |
int/float | int/float |
True/False | true/false |
None | null |
Flux d'operation fichier 🔄
Bonnes pratiques ✅
# 1. Toujours utiliser with with open("fichier.txt", "r") as f: contenu = f.read() # 2. Specifier l'encodage with open("fichier.txt", "r", encoding="utf-8") as f: contenu = f.read() # 3. Gerer les erreurs try: with open("fichier.txt", "r") as f: contenu = f.read() except FileNotFoundError: print("Fichier introuvable !") except PermissionError: print("Pas les droits d'acces !") # 4. Pour les gros fichiers, iterer with open("gros_fichier.csv", "r") as f: for ligne in f: traiter(ligne)
Exercice pour toi 🎯
# Exercice 1 : Journal de bord import datetime def journal(message): with open("journal.txt", "a", encoding="utf-8") as f: date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") f.write(f"[{date}] {message}\n") journal("Debut du projet") journal("Premier bug trouve") journal("Bug corrige !") # Exercice 2 : Convertir CSV → JSON import csv, json def csv_vers_json(nom_csv, nom_json): with open(nom_csv, "r", encoding="utf-8") as f: donnees = list(csv.DictReader(f)) with open(nom_json, "w", encoding="utf-8") as f: json.dump(donnees, f, indent=2, ensure_ascii=False) print(f"Converti {len(donnees)} lignes en JSON")
💡 Astuce : La manipulation de fichiers est essentielle pour les projets reels. Entraines-toi avec de vrais fichiers CSV et JSON !
⚡ Simulateur — Manipulation de fichiers
Étape 1/5📝 Pseudo-code
1with open("data.txt", "w") as f:
2 f.write("Bonjour")
3
4with open("data.txt", "r") as f:
5 contenu = f.read()
6 print(contenu)
⚙️ Exécution
📦 Mémoire
mode
écriture
fichier
"data.txt"
opération
open(w)
🔀 Flux d'exécution
open(w)
3
Ouverture en écriture
Le mot-clé with crée un gestionnaire de contexte. Le mode "w" ouvre le fichier en écriture. Le fichier sera automatiquement fermé à la fin du bloc.