le module standard csv permet d’échanger des tableaux avec d’autres outils.
objectifs
- lire un CSV avec
csv.DictReader - écrire un CSV avec
csv.DictWriter - comprendre
newline=""etencoding="utf-8" - filtrer/transformer des lignes
explication détaillée
lecture :
csv.DictReader(f)rend chaque ligne sous forme de dictstr -> str- convertir les types explicitement (
int(...),float(...)) si besoin écriture : csv.DictWriter(f, fieldnames=...)writeheader(), puiswriterow(...)/writerows(...)
exemples exécutables
import csv
with open("data.csv", "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(["name", "score"])
w.writerows([["ana", "12"], ["bob", "18"]])
with open("data.csv", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
rows = list(reader)
print(rows)
# filtrer et sauvegarder
rows_num = [{"name": r["name"], "score": int(r["score"])} for r in rows if r["score"].isdigit()]
best = [r for r in rows_num if r["score"] >= 15]
with open("best.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["name", "score"])
w.writeheader()
w.writerows(best)
bonnes pratiques
- ouvrir avec
newline=""pour éviter les lignes vides “fantômes” sous windows - normaliser/valider les types dès la lecture
- gérer les valeurs manquantes explicitement
pièges courants
- supposer que toutes les colonnes sont présentes → tester
in row - oublier de convertir les types (tout est
strà la lecture) - problème d’encodage → préciser
encoding="utf-8"
exercices
- charger
notes.csvet calculer la moyenne de la colonnescore(ignorer non numériques). - filtrer les lignes où
city == "paris"et écrire versparis.csv. - ajouter une colonne
passed=score >= 10et sauver verswith_passed.csv.