Le module csv (standard) gère les fichiers .csv. Pour des analyses, pandas est encore plus pratique.
import csvdata = [
['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.
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.
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é.
with open('/tmp/out.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['nom', 'age'])
writer.writeheader()
writer.writerow({'nom': 'Alice', 'age': 25})import pandas as pddf = 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)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 datetimeimport 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.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →