Aller au contenu

Chapitre 1 : Les fichiers CSV et l'importation de données

Programme officiel (B.O.)

B.O. spécial n° 1 du 22 janvier 2019 - NSI Première

Contenus Capacités attendues Commentaires
Données en tables Importer une table depuis un fichier texte tabulé ou un fichier CSV. Est utilisé un téléchargement d'un fichier ouvert au téléchargement et non la connexion à une base de données.

1. Les données tabulées

1.1 Qu'est-ce qu'une table de données ?

Une table de données est un ensemble d'informations organisées en lignes et colonnes, comme un tableur :

Nom Prénom Âge Ville
Dupont Marie 16 Lyon
Martin Léo 17 Paris
Durand Emma 16 Lille

Chaque ligne est un enregistrement (une entrée, un individu). Chaque colonne est un attribut (ou descripteur) : Nom, Prénom, Âge, Ville.

1.2 Vocabulaire

Terme Signification
Table Ensemble structuré de données en lignes et colonnes
Enregistrement Une ligne de la table (un individu)
Attribut (ou champ, descripteur) Une colonne de la table (une propriété)
Valeur Le contenu d'une cellule

2. Le format CSV

2.1 Définition

Le format CSV (Comma-Separated Values, valeurs séparées par des virgules) est un format texte simple pour stocker des données tabulées.

Un fichier CSV est un fichier texte brut dans lequel :

  • La première ligne contient les noms des attributs (l'en-tête) ;
  • Chaque ligne suivante contient un enregistrement ;
  • Les valeurs sont séparées par un séparateur (virgule, point-virgule ou tabulation).

2.2 Exemple

Le fichier eleves.csv :

nom,prenom,age,ville
Dupont,Marie,16,Lyon
Martin,Léo,17,Paris
Durand,Emma,16,Lille
Petit,Hugo,15,Marseille

Séparateur

En France, le séparateur est souvent le point-virgule (;) car la virgule est utilisée comme séparateur décimal dans les nombres. Les fichiers internationaux utilisent la virgule (,).

2.3 Avantages du CSV

  • Universel : lisible par tout éditeur de texte, tout tableur, tout langage de programmation.
  • Léger : pas de mise en forme, juste les données brutes.
  • Interopérable : permet d'échanger des données entre logiciels différents.

2.4 Limites du CSV

  • Pas de typage : tout est du texte (les nombres sont des chaînes qu'il faut convertir).
  • Pas de structure complexe (pas d'imbrication comme en JSON).
  • Problèmes si une valeur contient le séparateur (il faut alors l'entourer de guillemets).

3. Lire un fichier CSV en Python

3.1 Lecture manuelle (sans module)

On peut lire un CSV ligne par ligne et découper chaque ligne :

table = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lignes = fichier.readlines()
    en_tete = lignes[0].strip().split(",")
    for ligne in lignes[1:]:
        valeurs = ligne.strip().split(",")
        enregistrement = {}
        for i in range(len(en_tete)):
            enregistrement[en_tete[i]] = valeurs[i]
        table.append(enregistrement)

print(table)

Résultat :

[
    {"nom": "Dupont", "prenom": "Marie", "age": "16", "ville": "Lyon"},
    {"nom": "Martin", "prenom": "Léo", "age": "17", "ville": "Paris"},
    ...
]

Attention

Toutes les valeurs sont des chaînes de caractères. Il faudra convertir les nombres avec int() ou float() si nécessaire.

3.2 Lecture avec le module csv

Le module csv de Python gère les cas particuliers (guillemets, séparateurs dans les valeurs, etc.) :

import csv

table = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)
    for ligne in lecteur:
        table.append(dict(ligne))

print(table)

csv.DictReader renvoie chaque ligne sous forme de dictionnaire, avec les noms de colonnes comme clés.

3.3 Choisir le séparateur

Si le fichier utilise un point-virgule :

lecteur = csv.DictReader(fichier, delimiter=";")

4. Écrire un fichier CSV en Python

4.1 Avec le module csv

import csv

eleves = [
    {"nom": "Dupont", "prenom": "Marie", "age": 16, "ville": "Lyon"},
    {"nom": "Martin", "prenom": "Léo", "age": 17, "ville": "Paris"},
    {"nom": "Durand", "prenom": "Emma", "age": 16, "ville": "Lille"}
]

with open("sortie.csv", "w", encoding="utf-8", newline="") as fichier:
    colonnes = ["nom", "prenom", "age", "ville"]
    ecrivain = csv.DictWriter(fichier, fieldnames=colonnes)
    ecrivain.writeheader()
    for eleve in eleves:
        ecrivain.writerow(eleve)

Le fichier sortie.csv produit :

nom,prenom,age,ville
Dupont,Marie,16,Lyon
Martin,Léo,17,Paris
Durand,Emma,16,Lille

Le paramètre newline=""

Sur Windows, il faut passer newline="" à open() pour éviter des lignes vides entre les enregistrements.


5. Représentation en mémoire

En Python, une table de données se représente naturellement comme un tableau de dictionnaires :

table = [
    {"nom": "Dupont", "prenom": "Marie", "age": 16, "ville": "Lyon"},
    {"nom": "Martin", "prenom": "Léo",   "age": 17, "ville": "Paris"},
    {"nom": "Durand", "prenom": "Emma",  "age": 16, "ville": "Lille"}
]

Chaque dictionnaire est un enregistrement, chaque clé est un attribut.

Cette structure permet :

  • D'accéder à un enregistrement par son indice : table[0]
  • D'accéder à un attribut d'un enregistrement : table[0]["nom"]
  • De parcourir tous les enregistrements : for e in table:

6. Conversion des types

Les fichiers CSV ne contiennent que du texte. Lors de l'importation, il faut convertir les valeurs numériques :

import csv

table = []
with open("eleves.csv", "r", encoding="utf-8") as fichier:
    lecteur = csv.DictReader(fichier)
    for ligne in lecteur:
        enregistrement = dict(ligne)
        enregistrement["age"] = int(enregistrement["age"])
        table.append(enregistrement)

Après conversion, table[0]["age"] renvoie l'entier 16 et non la chaîne "16".


7. Résumé

Concept Détail
Table de données Lignes (enregistrements) et colonnes (attributs)
CSV Format texte, valeurs séparées par un délimiteur
Séparateur Virgule (,) ou point-virgule (;)
En Python Tableau de dictionnaires
Module csv DictReader (lecture), DictWriter (écriture)
Conversion Les valeurs CSV sont des chaînes, à convertir avec int() / float()
Encodage Toujours préciser encoding="utf-8"