Aller au contenu

Numérique et sciences informatiques (spécialité) · Première

Indexation de tables et format CSV : cours de 1re NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Une table est une liste d'enregistrements ; chaque enregistrement associe des valeurs à des champs (les colonnes). 1
  • Le CSV stocke une table dans un fichier texte : une ligne = un enregistrement, valeurs séparées par un délimiteur (virgule ou point-virgule). 3
  • Lue brute, une table devient un tableau de tableaux : on accède à une valeur par deux indices, et le nom des champs est perdu. 3
  • Avec les noms de champs de la première ligne, on obtient un tableau de p-uplets nommés, représentés par des dictionnaires : t[i]["champ"]. 3 5
  • Les valeurs lues dans un fichier sont des chaînes : il faut les convertir (int, float) avant tout calcul.

Introduction : pourquoi parler de tables ?

Une application de météo, un carnet de notes en ligne, un catalogue de films : tous reposent sur des données organisées. Au lieu de les laisser en vrac, on les range en lignes et en colonnes, comme dans un tableur. C'est ce qu'on appelle une table.

En première NSI, le programme demande de savoir lire ces données depuis un fichier, de les placer dans des structures Python, puis de les exploiter. 1 Ce cours s'occupe de la première étape : comment une table est stockée dans un fichier CSV, et comment on retrouve une donnée précise une fois le fichier chargé (c'est l'indexation).

Tu verras ensuite, dans les pages suivantes, la recherche dans une table, son tri et la fusion de deux tables.

Qu'est-ce qu'une table ?

Une table : champs, enregistrements, valeurs
nomclassenote
Camille1A14
Yanis1B9
Inès1A17
Lucas1C12
Une table : champs, enregistrements, valeurs · Chaque ligne est un enregistrement, chaque colonne un champ.

Le format CSV

De la ligne de texte à la valeur utilisableQuatre étapes pour lire un fichier CSV en Python.1OuvrirOuvrir le fichier avec le bon encodage2DécouperSéparer les valeurs selon le délimiteur3RangerListes ou dictionnaires selon le besoin4ConvertirPasser les chaînes en nombres si besoin
  1. OuvrirOuvrir le fichier avec le bon encodage
  2. DécouperSéparer les valeurs selon le délimiteur
  3. RangerListes ou dictionnaires selon le besoin
  4. ConvertirPasser les chaînes en nombres si besoin
De la ligne de texte à la valeur utilisable · Chaque étape corrige un piège de la précédente.

Charger un CSV : le tableau de tableaux

Pour exploiter un fichier, on le lit avec Python et on range son contenu dans une structure. La première façon, la plus simple, donne un tableau de tableaux : chaque ligne du fichier devient un tableau (une liste Python) de valeurs. 3

Charger un CSV : le tableau de p-uplets nommés

Si la première ligne du fichier contient les noms des colonnes, on peut s'en servir pour nommer les champs. On obtient alors un tableau de p-uplets nommés, où chaque enregistrement est représenté sous forme de dictionnaire. 3 5

Parcourir une table et la manipuler

Indexer une donnée précise est utile, mais on veut souvent parcourir tous les enregistrements. Une simple boucle suffit, et un tableau convient très bien quand c'est le but principal. 5

Écrire un fichier CSV et bonnes pratiques

Le chemin inverse existe : transformer une table Python en fichier CSV. C'est utile pour sauvegarder un résultat ou l'envoyer à un tableur.

Une fois la table chargée, on veut la parcourir plus efficacement, la classer ou la croiser avec une autre. Ces opérations sont l'objet des pages suivantes : la recherche dans une table, le tri (qui demande de préciser selon quels critères on classe, car trier une table « sans critère » n'a pas de sens) et la fusion de tables. 3 1

Exercices corrigés

Exercice 1 Compter les enregistrements d'un fichier

★☆☆Environ 5 min

Le fichier villes.csv contient 8 lignes, dont la première est l'en-tête nom,pays,habitants. Combien d'enregistrements la table contient-elle ? Quelle expression Python donne ce nombre si le fichier est chargé en tableau de tableaux table ?

Indice 1

L'en-tête n'est pas un enregistrement.

Indice 2

Utilise len.

Voir la correction pas à pas
  1. On repère que le fichier compte 8 lignes au total.

  2. La première ligne décrit les champs : elle ne compte pas comme enregistrement.

  3. Le nombre d'enregistrements est donc 8−1=78 - 1 = 7.

  4. En Python, avec un tableau de tableaux, on écrit len(table) - 1.

La table contient 7 enregistrements, obtenus par len(table) - 1. Avec un tableau de dictionnaires, len(table) suffirait.

Exercice 2 Moyenne de notes lues dans un CSV

★★☆Environ 10 min

On a chargé un fichier avec DictReader :

table = [{'nom': 'Léa', 'note': '12'},
         {'nom': 'Paul', 'note': '15'},
         {'nom': 'Zoé', 'note': '9'},
         {'nom': 'Hugo', 'note': '18'}]
  1. Quelle expression désigne la note de Zoé ?
  2. Pourquoi table[0]['note'] + table[1]['note'] ne donne-t-il pas 27 ?
  3. Calcule la moyenne des quatre notes.
Indice 1

Zoé est en position 2.

Indice 2

Regarde le type des valeurs.

Voir la correction pas à pas
  1. Zoé est le troisième enregistrement, donc à l'indice 2 : l'expression est table[2]['note'], qui vaut '9'.

  2. Les valeurs sont des chaînes. L'addition de deux chaînes les met bout à bout : '12' + '15' donne '1215'. Il faut écrire int(table[0]['note']) + int(table[1]['note']) pour obtenir 27.

  3. On convertit puis on additionne : 12+15+9+18=5412 + 15 + 9 + 18 = 54.

  4. On divise par le nombre d'enregistrements, len(table) = 4 : 54/4=13,554 / 4 = 13{,}5.

La moyenne vaut 13,5. Retiens le réflexe : lire, convertir, puis calculer.

Exercice 3 Choisir et écrire le bon accès

★★★Environ 15 min

Le fichier stock.csv (délimiteur ;) contient :

produit;quantite;prix
stylo;40;2
cahier;25;3
classeur;10;5

On le charge avec csv.reader en tableau de tableaux t.

  1. Donne la valeur de t[2][0].
  2. Quelle valeur de delimiter faut-il passer ?
  3. Calcule la valeur totale du stock, c'est-à-dire la somme de quantité × prix sur tous les produits, en euros.
Indice 1

Compte l'en-tête dans les indices.

Indice 2

Multiplie quantité par prix pour chaque ligne, puis additionne.

Voir la correction pas à pas
  1. L'en-tête est en t[0], le stylo en t[1], le cahier en t[2]. Donc t[2][0] vaut 'cahier'.

  2. Les valeurs sont séparées par des points-virgules : on passe delimiter=";".

  3. Stylos : 40×2=8040 \times 2 = 80 euros.

  4. Cahiers : 25×3=7525 \times 3 = 75 euros.

  5. Classeurs : 10×5=5010 \times 5 = 50 euros.

  6. Total : 80+75+50=20580 + 75 + 50 = 205 euros. En code : sum(int(l[1]) * int(l[2]) for l in t[1:]), où t[1:] écarte l'en-tête.

Le stock vaut 205 euros. Remarque la tranche t[1:] : elle saute la ligne d'en-tête qui contient du texte et ferait échouer int.

Quiz

6 questions · correction immédiate · ton score reste sur ton appareil.

  1. Que signifie l'acronyme CSV ?

  2. Dans un fichier CSV bien formé, que représente une ligne de données ?

  3. On charge eleves.csv avec csv.reader. Quelle expression désigne le premier enregistrement (hors en-tête) ?

  4. Quand on charge un CSV en tableau de tableaux, le nom des champs reste directement attaché à chaque valeur.

  5. Le fichier suivant est lu avec DictReader :

    nom,age puis trois lignes de données.

    Quelle est la valeur de len(table) ?

  6. Un fichier CSV contient une ligne d'en-tête et 5 lignes de données. Chargé avec csv.reader, combien d'éléments la liste table contient-elle ?

Les questions qu'on se pose

Pourquoi mon fichier CSV s'affiche-t-il sur une seule colonne dans le programme ?

Le délimiteur indiqué ne correspond pas à celui du fichier. Si les valeurs sont séparées par des points-virgules et que tu lis avec la virgule, chaque ligne reste une seule chaîne. 3 Ouvre le fichier dans un éditeur de texte, repère le caractère utilisé, puis passe-le dans delimiter=.

Faut-il toujours choisir les dictionnaires plutôt que les listes ?

Pas toujours. Les dictionnaires rendent le code plus lisible et résistent aux changements de colonnes. 3 Une liste de listes suffit quand la table est minuscule ou quand tu ne fais que parcourir les lignes. 5 Sur un devoir, lis bien ce que l'énoncé demande : le type attendu est souvent précisé.

Pourquoi `int()` ou `float()` est-il nécessaire après la lecture ?

Parce qu'un fichier texte ne stocke que des caractères : la valeur lue est la chaîne '14' et non le nombre 14. Sans conversion, + colle deux textes et la comparaison < suit l'ordre alphabétique, ce qui donne que '9' > '12'. Convertis la colonne dès le chargement.

À quoi sert l'indexation d'une table, concrètement ?

Elle permet d'aller chercher une donnée sans parcourir tout le reste : « la note du 3e élève », « la population de la 2e ville ». C'est le socle des opérations suivantes du chapitre : rechercher des enregistrements, les trier, puis fusionner plusieurs tables. 1 Bien maîtriser les indices (et le décalage dû à l'en-tête) évite la plupart des erreurs de ces opérations.

Sources

Programme visé : Programme de numérique et sciences informatiques de Première générale · Ministère de l'Éducation nationale (education.gouv.fr)

  1. Programme de numérique et sciences informatiques de Première générale, Ministère de l'Éducation nationale (education.gouv.fr). Consulté le 7 novembre 2026.
  2. Programmes et ressources en numérique et sciences informatiques - Voie générale, Éduscol (eduscol.education.gouv.fr). Consulté le 7 novembre 2026.
  3. Manipulation de tables (Ressource Éduscol - NSI), Éduscol. Consulté le 7 novembre 2026.
  4. Manipulation de tables avec pandas (Ressource Éduscol - NSI), Éduscol. Consulté le 7 novembre 2026.
  5. p-uplets nommés et dictionnaires (Ressource Éduscol - NSI), Éduscol. Consulté le 7 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page