Charger des données à partir d’un fichier

icône de pdf
Signaler
Cette leçon t’apprend à importer un fichier CSV en Python pour transformer un simple texte en table exploitable. Tu découvriras comment gérer les séparateurs, les encodages, structurer les données sous forme de listes ou dictionnaires et nettoyer les erreurs avant de les analyser. Mots-clés : Python, CSV, importation de données, encodage, table, NSI.

Introduction

Les données numériques sont partout : bulletins scolaires, résultats sportifs, catalogues d’applications, fichiers de contacts ou historiques de navigation. Pour les exploiter, les programmes doivent être capables de lire et charger automatiquement ces données. C’est le rôle de l’importation depuis des fichiers texte, notamment au format CSV, largement utilisé pour stocker des données organisées en table. Dans ce format, chaque ligne représente un enregistrement, et chaque colonne correspond à un descripteur partagé par toutes les lignes. Apprendre à importer ces fichiers permet ensuite de les explorer, de les rechercher, de les trier ou de les fusionner, comme on le verra dans les leçons suivantes.

Lire un fichier CSV : un format simple et universel

Un fichier CSV (Comma-Separated Values) contient des lignes de texte où chaque champ est séparé par un caractère (souvent une virgule, un point-virgule ou une tabulation). Ce format permet de représenter une table de manière simple, sans logiciel spécialisé.

Exemple de contenu d’un fichier eleves.csv :

nom;prenom;classe;age
Durand;Alice;1A;16
Martin;Benoît;1B;17
Nguyen;Thierry;1A;16
Dupuis;Camille;1C;15
Ben Saïd;Leila;1B;16
Gomez;Luis;1A;17
Carpentier;Emma;1C;16
Lemoine;Adrien;1B;15
Dubois;Sarah;1A;16
Kouadio;Amara;1C;17

Pour lire ce fichier avec Python, on utilise la fonction open ainsi que le module csv :

import csv

with open('eleves.csv', newline='', encoding='utf-8') as fichier:
    lecteur = csv.reader(fichier, delimiter=';')
    for ligne in lecteur:
        print(ligne)

Chaque ligne est lue comme une liste de chaînes de caractères, ce qui permet d’y accéder facilement par index.

À retenir

Le format CSV permet de stocker des données tabulaires dans un simple fichier texte. Chaque ligne correspond à une ligne de table, et chaque champ est séparé par un délimiteur (souvent « , » ou « ; »).

Représenter les données sous forme de table

Une fois les lignes lues, il est nécessaire de les organiser dans une structure de données exploitable. En Python, deux représentations sont courantes :

  • La liste de dictionnaires, où chaque dictionnaire représente une ligne de table avec des clés correspondant aux noms de colonnes.

  • Le tableau doublement indexé, c’est-à-dire une liste de listes, où les éléments sont accessibles par deux indices (ligne, colonne).

Le format le plus intuitif pour un traitement par nom de champ est la liste de dictionnaires, construite automatiquement avec csv.DictReader :

import csv

with open('eleves.csv', newline='', encoding='utf-8') as fichier:
    lecteur = csv.DictReader(fichier, delimiter=';')
    table = [ligne for ligne in lecteur]

for eleve in table:
    print(eleve['nom'], eleve['classe'])

Chaque élément de la table est un dictionnaire :
{'nom': 'Durand', 'prenom': 'Alice', 'classe': '1A', 'age': '16'}

Alternativement, un tableau doublement indexé peut être utile si les positions des champs sont connues et fixes, comme dans un traitement mathématique :

table = [
    ['Durand', 'Alice', '1A', '16'],
    ['Martin', 'Benoît', '1B', '17'],
    ['Nguyen', 'Thierry', '1A', '16']
]

# Afficher le prénom du deuxième élève
print(table[1][1])

Le choix dépend du contexte : une liste de dictionnaires est préférable pour les recherches ou tris sur un champ nommé, tandis qu’un tableau indexé peut être plus efficace dans des calculs structurés ou des manipulations purement positionnelles.

À retenir

Une table est une liste de lignes partageant les mêmes descripteurs. Elle peut être représentée par une liste de dictionnaires (accès par nom de champ) ou un tableau doublement indexé (accès par indices).

Gérer les séparateurs et les encodages

Tous les fichiers CSV ne sont pas identiques. Certains utilisent des virgules, d’autres des tabulations ou des points-virgules comme séparateurs. De plus, les fichiers peuvent être enregistrés avec des encodages de caractères variés.

Pour indiquer un séparateur différent :

csv.reader(fichier, delimiter=';')

Pour lire un fichier en UTF-8 (cas standard) :

with open('eleves.csv', encoding='utf-8') as fichier:
    ...

Mais certains fichiers anciens utilisent d’autres encodages, comme ISO-8859-1 :

with open('eleves.csv', encoding='iso-8859-1') as fichier:
    ...

Un mauvais encodage peut provoquer l’apparition de caractères illisibles ou des erreurs à la lecture. De même, une mauvaise détection du séparateur conduit à une mauvaise structuration des données (exemple : une seule colonne contenant toute la ligne).

À retenir

Il est indispensable d’adapter le séparateur et l’encodage lors de la lecture d’un fichier CSV. Une mauvaise configuration empêche d’exploiter correctement les données.

Vérifier et nettoyer les données importées

Les données contenues dans un fichier CSV peuvent comporter des erreurs : champs manquants, âges non numériques, ou doublons (même élève présent deux fois).

Pour convertir explicitement les types et signaler les erreurs :

table = []

with open('eleves.csv', newline='', encoding='utf-8') as fichier:
    lecteur = csv.DictReader(fichier, delimiter=';')
    for ligne in lecteur:
        try:
            ligne['age'] = int(ligne['age'])  # Conversion explicite
            table.append(ligne)
        except ValueError:
            print("Âge invalide :", ligne)

Pour détecter les doublons sur certaines colonnes (ici : nom, prénom, classe) :

vus = set()
uniques = []

for ligne in table:
    cle = (ligne['nom'], ligne['prenom'], ligne['classe'])
    if cle not in vus:
        vus.add(cle)
        uniques.append(ligne)

Ces vérifications sont essentielles avant d’appliquer des opérations comme la recherche ou le tri, qui nécessitent une base de données propre.

À retenir

Après l’importation, il faut vérifier la validité des données : détecter les erreurs de type et éliminer les doublons pour garantir une table exploitable.

Conclusion

Importer un fichier CSV permet de reconstruire en mémoire une table de données structurée. En maîtrisant les formats, les encodages et les structures de stockage, on se donne les moyens d’explorer ces données de manière rigoureuse. Cette compétence est le point de départ des leçons suivantes : chercher une information dans une table, trier selon un critère, ou encore fusionner plusieurs sources de données.