Skip to content

Découvrir le format CSV

Qu'est-ce qu'un fichier CSV ?

Un fichier CSV (Comma Separated Values) est un fichier texte qui permet de stocker des données sous forme de table.

Exemple de fichier eleves.csv :

id,nom,age,ville
1,Alice,17,Lyon
2,Hugo,16,Saint-Étienne
3,Lina,17,Lyon
4,Tom,16,Grenoble
Chaque ligne correspond à un enregistrement.

Les valeurs sont séparées par un séparateur, souvent :

  • une virgule

  • ou un point-virgule


Intérêt du format CSV

  • format simple

  • exploitable facilement par une personne

  • compatible avec de nombreux logiciels :

  • tableur

  • Python

  • bases de données

Lire un fichier CSV en Python

Notion Python : le module csv

Pour manipuler un fichier CSV, on utilise le module csv.

import csv
Lire un fichier CSV ligne par ligne
import csv

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.reader(fichier)

    for ligne in lecteur:
        print(ligne)

Quelques explications

open(...) ouvre le fichier

"r" signifie lecture

csv.reader(...) permet de lire le contenu

chaque ligne est une liste de chaînes de caractères

Lire un CSV avec les noms de colonnes

import csv

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        print(ligne)
voici un exemple de résultat retourné par python

{'id': '1', 'nom': 'Alice', 'age': '17', 'ville': 'Lyon'}
{'id': '2', 'nom': 'Hugo', 'age': '16', 'ville': 'Saint-Étienne'}
Ici, chaque ligne est lue comme un dictionnaire. Remarque importante

Les valeurs lues depuis un fichier CSV sont des chaînes de caractères. Il faut donc parfois convertir :

age = int(ligne["age"])

Activité

Créer à l'aide de notepad++ le fichier eleves.csv. Enregistrer le fichier créer dans votre répertoire courant de travail avec édupython.

id,nom,age,ville
1,Alice,17,Lyon
2,Hugo,16,Saint-Étienne
3,Lina,17,Lyon
4,Tom,16,Grenoble

Exercice 1

Afficher uniquement les noms des élèves.

Exercice 2

Afficher les élèves de Lyon.

Exercice 3

Compter les élèves âgés de 16 ans.

Une réponse pour l'exercice 1 ?
Aller encore un petit effort !
import csv # à placer en haut de votre script

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        print(ligne["nom"])
Une réponse pour l'exercice 2 ?
Aller encore un petit effort !
import csv

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        if ligne["ville"] == "Lyon":
            print(ligne)
Une réponse pour l'exercice 3 ?
Aller encore un petit effort !
import csv

c = 0

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        if int(ligne["age"]) == 16:
            c += 1

print(c)

Écrire un fichier CSV

Écrire dans un fichier CSV

On peut créer un nouveau fichier CSV avec csv.writer.

Ecrivons un fichier à partir d'une suite de listes
import csv

with open("nouveau.csv", "w", newline="", encoding="utf-8") as fichier:
    ecrivain = csv.writer(fichier)

    ecrivain.writerow(["id", "nom", "age", "ville"])
    ecrivain.writerow([1, "Alice", 17, "Lyon"])
    ecrivain.writerow([2, "Hugo", 16, "Saint-Étienne"])

Quelques explications

"w" signifie écriture

newline="" évite des lignes vides supplémentaires selon les systèmes

writerow(...) écrit une ligne

Écrire un CSV à partir d'une liste de dictionnaires
import csv

eleves = [
    {"id": 1, "nom": "Alice", "age": 17, "ville": "Lyon"},
    {"id": 2, "nom": "Hugo", "age": 16, "ville": "Saint-Étienne"},
    {"id": 3, "nom": "Lina", "age": 17, "ville": "Lyon"}
]

with open("eleves_sortie.csv", "w", newline="", encoding="utf-8") as fichier:
    attributs = ["id", "nom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=attributs)

    ecrivain.writeheader()

    for e in eleves:
        ecrivain.writerow(e)

Activité

Exercice 1

Créer un fichier films.csv contenant :

titre annee note
Inception 2010 9
Avatar 2009 8
Matrix 1999 10
Exercice 2

Créer un fichier CSV contenant uniquement les élèves de Lyon.

Modifier un fichier CSV

L'idée générale :

Un fichier CSV ne se modifie pas directement ligne par ligne de façon simple.

En pratique, on procède souvent ainsi :

  1. on lit le fichier

  2. on stocke les données en mémoire

  3. on modifie les données

  4. on réécrit le fichier complet

Exemple : modifier l'âge d'un élève

On veut changer l'âge de Hugo et mettre 17.

import csv

eleves = []

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        if ligne["nom"] == "Hugo":
            ligne["age"] = "17"
        eleves.append(ligne)

with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
    attributs = ["id", "nom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=attributs)

    ecrivain.writeheader()

    for e in eleves:
        ecrivain.writerow(e)

Exemple : ajouter un élève

import csv

eleves = []

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        eleves.append(ligne)

nouvel_eleve = {"id": "5", "nom": "Sara", "age": "16", "ville": "Annecy"}
eleves.append(nouvel_eleve)

with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
    attributs = ["id", "nom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=attributs)

    ecrivain.writeheader()

    for e in eleves:
        ecrivain.writerow(e)

Exemple : supprimer les élèves d'une ville

import csv

eleves = []

with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)

    for ligne in lecteur:
        if ligne["ville"] != "Lyon":
            eleves.append(ligne)

with open("eleves.csv", "w", newline="", encoding="utf-8") as fichier:
    attributs = ["id", "nom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=attributs)

    ecrivain.writeheader()

    for e in eleves:
        ecrivain.writerow(e)

Activité complète avec deux fichiers CSV

Fichier 1 : eleves.csv

id,nom,classe
1,Alice,1A
2,Hugo,1B
3,Lina,1A
4,Tom,1C

Fichier 2 : notes.csv

id,matiere,note
1,maths,15
1,NSI,18
2,maths,12
3,NSI,17
4,maths,11

Travail demandé

Partie A — Lecture

  1. Lire le fichier eleves.csv

  2. Lire le fichier notes.csv

  3. Afficher tous les élèves

  4. Afficher toutes les notes

Partie B — Filtrage

  1. Afficher les élèves de la classe 1A

  2. Afficher toutes les notes de maths

  3. Afficher les notes supérieures ou égales à 15

Partie C — Fusion

Construire une table fusionnée contenant :

  • nom

  • classe

  • matière

  • note

Partie D — Écriture

Écrire le résultat de la fusion dans un fichier resultat.csv

Ajouter une donnée dans un fichier CSV existant

On souhaite ajouter une donnée dans un fichier csv existant, à la suite des autres données, sans réécrire tout le fichier.

on veut ajouter une nouvelle élève au fichier eleves.csv

with open("eleves.csv", "a", newline="", encoding="utf-8")

On remarque l'utilisation du paramètre "a" pour append

eleves = [
    {"id": "7", "nom": "Julie", "age": "16", "ville": "Annecy"}
]

with open("eleves.csv", "a", newline="", encoding="utf-8") as fichier:
    attributs = ["id", "nom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=attributs)

    for e in eleves:
        ecrivain.writerow(e)