Exercice 94 / 100

Fichiers CSV

Crée un fichier CSV avec les données (nom, age, ville) pour Alice, Bob et Charlie, écris-le avec csv.writer, relis-le avec csv.DictReader, puis relis-le aussi avec pandas.

Le module csv (standard) gère les fichiers .csv. Pour des analyses, pandas est encore plus pratique.

Écrire un CSV avec csv

import csv
data = [ ['nom', 'age', 'ville'], # en-tête ['Alice', 25, 'Paris'], ['Bob', 30, 'Lyon'], ]
with open('/tmp/test.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(data)

newline='' à l'ouverture en écriture : indispensable sur Windows pour éviter les doubles \n.

Lire un CSV avec csv

with open('/tmp/test.csv', 'r') as f: reader = csv.reader(f) for row in reader: print(row) # ['nom', 'age', 'ville'], puis ['Alice', '25', 'Paris']...

csv.reader renvoie tout en str, même les nombres : '25' (pas 25). À convertir manuellement.

DictReader : utiliser les en-têtes comme clés

with open('/tmp/test.csv', 'r') as f: reader = csv.DictReader(f) for row in reader: print(f"{row['nom']} a {row['age']} ans")

Plus lisible que de jongler avec les index. Recommandé.

DictWriter : écrire depuis des dicts

with open('/tmp/out.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=['nom', 'age']) writer.writeheader() writer.writerow({'nom': 'Alice', 'age': 25})

Lecture avec pandas (recommandé pour l'analyse)

import pandas as pd
df = pd.read_csv('/tmp/test.csv') df['age'] = df['age'].astype(int) # parsing automatique des types souvent ok df.to_csv('/tmp/out.csv', index=False)
Le même fichier se lit de trois façons : csv.reader rend des listes où 25 reste du texte, DictReader rend un dict par ligne avec les en-têtes en clés, et pandas rend un tableau aux types devinés

Options utiles de read_csv :

sep=';' séparateur autre que , header=None pas d'en-tête names=['a', 'b'] forcer les noms de colonnes encoding='latin-1' si UTF-8 ne marche pas na_values=['', 'NA'] valeurs à traiter comme NaN parse_dates=['date'] parser une colonne en datetime

Nettoyer le fichier

import os os.remove('/tmp/test.csv')

Règle : pour scripter une transformation rapide, csv est suffisant. Dès que tu analyses (filtrer, agréger, joindre), pandas.

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →