Programme Officiel
  Contenus
   Capacités attendues
      Commentaires
Indexation de tables Importer une table depuis un fichier texte tabulé ou un fichier CSV. Est utilisé un tableau doublement indexé ou un tableau de p-uplets qui partagent les mêmes descripteurs.
Recherche dans une table Rechercher les lignes d’une table vérifiant des critères exprimés en logique propositionnelle. La recherche de doublons, les tests de cohérence d’une table sont présentés.
Lien vers le programme complet

CSV Logo dt RGB.jpg
By Christlichsoziale Vereinigung Schweiz (CSV) - http://www.csp-schweiz.ch/, CC BY-SA 4.0, Link

Avec l’augmentation des capacités de stockage, on sauvegarde de plus en plus de données en vue de les traiter ultérieurement afin de leur donner une valeur ajoutée.

On appelle ainsi les données: “Le nouvel or noir”

Data, le nouvel or noir ?)

Dans ce chapitre nous allons apprendre à lire des données à partir de fichiers csv afin d’y accéder sous forme de type construits imbriqués: nous utiliserons des listes de dictionnaires.

Vous avez l’habitude d’utiliser un tableur pour traiter des tables de données.

Cependant, le problème de compatibilité des fichiers entre les divers logiciels de tableur fait que l’informaticien préfère souvent des formats textuels simples comme le csv comma separated values: valeurs séparées par des virgules ou encore le xml ou le json(voir le cours de snt.

Le format csv consite en un simple fichier texte dans lequel les colonnes sont séparées par des virgules.

Les descripteurs de colonnes sont placés sur la première ligne, et les autres lignes correspondent aux entrées du tableau.

Tous les logiciels de tableur et langages de programmation peuvent facilement lire ou écrire ces fichiers.

Voici l’exemple d’un fichier de notes généré par le logiciel Pronote.

Mentions,1/2j abs,Rang,Moyenne Générale,MATHEMATIQUES,PHYSIQUE-CHIMIE,NSI
Félicitations,3,1,17.4,15.3,15.5,18,18.5
Encouragements,5,1,10.1,8,10,15

On utilise parfois la tabulation comme séparateur pour une lecture plus aisée par l’homme, et ne pas être gêné par le fait que nous autres français utilisons la virgule comme séparateur décimal!

Mentions    1/2j abs    Rang    Moyenne Générale    MATHEMATIQUES   PHYSIQUE-CHIMIE NSI
Félicitations   3   1   17.4    15.3    15.5    18  18.5
Encouragements  5   1   10.1    8   10  15

Lecture d’un fichier csv en Python

Python propose un module csv spécialisé.

import csv

# Lecture du fichier with open('./data/notes.csv') as csvfile: reader = csv.DictReader(csvfile) # Itération sur les lignes for ligne in reader: print(ligne)

{'Nom': 'OBUQW', 'Mentions': 'Félicitations', '1/2j abs': '3', 'Rang': '1', 'Moyenne Générale': '17.4', 'MATHEMATIQUES': '18', 'PHYSIQUE-CHIMIE': '18.5', 'NSI': '17.7'}
{'Nom': 'XYYVQ', 'Mentions': 'Félicitations', '1/2j abs': '5', 'Rang': '1', 'Moyenne Générale': '18.1', 'MATHEMATIQUES': '19.2', 'PHYSIQUE-CHIMIE': '18', 'NSI': '19'}
{'Nom': 'SJOLY', 'Mentions': 'Félicitations', '1/2j abs': '', 'Rang': '1', 'Moyenne Générale': '18.2', 'MATHEMATIQUES': '19.2', 'PHYSIQUE-CHIMIE': '17', 'NSI': '19.1'}
{'Nom': 'CAOZY', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '2', 'Moyenne Générale': '17', 'MATHEMATIQUES': '18.5', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '17.9'}
{'Nom': 'NULRT', 'Mentions': 'Félicitations', '1/2j abs': '2', 'Rang': '2', 'Moyenne Générale': '17.6', 'MATHEMATIQUES': '17.8', 'PHYSIQUE-CHIMIE': '18.5', 'NSI': '17.5'}
{'Nom': 'SATNL', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '2', 'Moyenne Générale': '17', 'MATHEMATIQUES': '17.5', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '18.6'}
{'Nom': 'BXARC', 'Mentions': 'Félicitations', '1/2j abs': '15', 'Rang': '2', 'Moyenne Générale': '18.1', 'MATHEMATIQUES': '19.4', 'PHYSIQUE-CHIMIE': '19', 'NSI': '16.6'}
{'Nom': 'UFXVM', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '3', 'Moyenne Générale': '17.6', 'MATHEMATIQUES': '18.6', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '16.5'}
{'Nom': 'ASLZS', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '3', 'Moyenne Générale': '17.8', 'MATHEMATIQUES': '19.4', 'PHYSIQUE-CHIMIE': '19', 'NSI': '17.8'}
{'Nom': 'PIGCD', 'Mentions': 'Félicitations', '1/2j abs': '9', 'Rang': '3', 'Moyenne Générale': '17.8', 'MATHEMATIQUES': '18.9', 'PHYSIQUE-CHIMIE': '20', 'NSI': '17.6'}
{'Nom': 'NBQVQ', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '4', 'Moyenne Générale': '16.5', 'MATHEMATIQUES': '17.6', 'PHYSIQUE-CHIMIE': '16.5', 'NSI': '17.2'}
{'Nom': 'IXHGB', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '17.4', 'Moyenne Générale': '17.3', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '17.9', 'NSI': '16'}
{'Nom': 'HKYCU', 'Mentions': 'Félicitations', '1/2j abs': '2', 'Rang': '5', 'Moyenne Générale': '16.4', 'MATHEMATIQUES': '18.1', 'PHYSIQUE-CHIMIE': '17', 'NSI': '17.9'}
{'Nom': 'XRZOA', 'Mentions': 'Félicitations', '1/2j abs': '9', 'Rang': '5', 'Moyenne Générale': '16.6', 'MATHEMATIQUES': '18.3', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '14.7'}
{'Nom': 'SEXRW', 'Mentions': 'Félicitations', '1/2j abs': '16', 'Rang': '5', 'Moyenne Générale': '17.1', 'MATHEMATIQUES': '17.8', 'PHYSIQUE-CHIMIE': '16', 'NSI': '18.8'}
{'Nom': 'FROXY', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '6', 'Moyenne Générale': '16.3', 'MATHEMATIQUES': '19.3', 'PHYSIQUE-CHIMIE': '17', 'NSI': '15'}
{'Nom': 'MPBWD', 'Mentions': 'Félicitations', '1/2j abs': '7', 'Rang': '6', 'Moyenne Générale': '16.5', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '17', 'NSI': '16.7'}
{'Nom': 'PAZCW', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '16.4', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '16.8', 'NSI': '13.5'}
{'Nom': 'XOWON', 'Mentions': 'Félicitations', '1/2j abs': '3', 'Rang': '7', 'Moyenne Générale': '15.4', 'MATHEMATIQUES': '15.2', 'PHYSIQUE-CHIMIE': '16', 'NSI': '16.4'}
{'Nom': 'XSXJX', 'Mentions': 'Félicitations', '1/2j abs': '8', 'Rang': '7', 'Moyenne Générale': '15.4', 'MATHEMATIQUES': '16.2', 'PHYSIQUE-CHIMIE': '12.5', 'NSI': '16.6'}
{'Nom': 'RRWVF', 'Mentions': 'Félicitations', '1/2j abs': '12', 'Rang': '7', 'Moyenne Générale': '15.5', 'MATHEMATIQUES': '14.4', 'PHYSIQUE-CHIMIE': '15', 'NSI': '16.4'}
{'Nom': 'VFQIV', 'Mentions': 'Félicitations', '1/2j abs': '11', 'Rang': '8', 'Moyenne Générale': '14.5', 'MATHEMATIQUES': '14.4', 'PHYSIQUE-CHIMIE': '13', 'NSI': '10.3'}
{'Nom': 'WGLOT', 'Mentions': 'Compliments', '1/2j abs': '8', 'Rang': '14', 'Moyenne Générale': '12', 'MATHEMATIQUES': '16', 'PHYSIQUE-CHIMIE': '11.8', 'NSI': '13.5'}
{'Nom': 'YPSAM', 'Mentions': 'Félicitations', '1/2j abs': '8', 'Rang': '14.6', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '14.5', 'PHYSIQUE-CHIMIE': '14.5', 'NSI': '19'}
{'Nom': 'AYFHQ', 'Mentions': 'Compliments', '1/2j abs': '2', 'Rang': '9', 'Moyenne Générale': '13.9', 'MATHEMATIQUES': '13.5', 'PHYSIQUE-CHIMIE': '13.5', 'NSI': '14.2'}
{'Nom': 'QCTQB', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '9', 'Moyenne Générale': '14.4', 'MATHEMATIQUES': '14.1', 'PHYSIQUE-CHIMIE': '11', 'NSI': '11.1'}
{'Nom': 'MXVIJ', 'Mentions': 'Compliments', '1/2j abs': '8', 'Rang': '9', 'Moyenne Générale': '13.7', 'MATHEMATIQUES': '13', 'PHYSIQUE-CHIMIE': '12', 'NSI': '11.2'}
{'Nom': 'UQAYM', 'Mentions': 'Compliments', '1/2j abs': '2', 'Rang': '10', 'Moyenne Générale': '13.9', 'MATHEMATIQUES': '14', 'PHYSIQUE-CHIMIE': '11', 'NSI': '14.8'}
{'Nom': 'TFIAB', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '10', 'Moyenne Générale': '13.6', 'MATHEMATIQUES': '14.2', 'PHYSIQUE-CHIMIE': '13', 'NSI': '13.3'}
{'Nom': 'NHLZR', 'Mentions': 'Compliments', '1/2j abs': '14', 'Rang': '10', 'Moyenne Générale': '13.9', 'MATHEMATIQUES': '13.7', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '15.4'}
{'Nom': 'XPVXR', 'Mentions': 'Compliments', '1/2j abs': '10', 'Rang': '13.9', 'Moyenne Générale': '11', 'MATHEMATIQUES': '14', 'PHYSIQUE-CHIMIE': '14.2', 'NSI': '19.5'}
{'Nom': 'OLQBO', 'Mentions': 'Félicitations', '1/2j abs': '14', 'Rang': '11', 'Moyenne Générale': '13.5', 'MATHEMATIQUES': '12.8', 'PHYSIQUE-CHIMIE': '13', 'NSI': '11.2'}
{'Nom': 'CUTBU', 'Mentions': 'Compliments', '1/2j abs': '11', 'Rang': '13.6', 'Moyenne Générale': '12.3', 'MATHEMATIQUES': '11.5', 'PHYSIQUE-CHIMIE': '13.6', 'NSI': '14.5'}
{'Nom': 'SQVNH', 'Mentions': 'Pas de mention', '1/2j abs': '2', 'Rang': '12', 'Moyenne Générale': '13.8', 'MATHEMATIQUES': '15', 'PHYSIQUE-CHIMIE': '16', 'NSI': '12.4'}
{'Nom': 'TVMRA', 'Mentions': 'Pas de mention', '1/2j abs': '65', 'Rang': '12', 'Moyenne Générale': '13.5', 'MATHEMATIQUES': '8', 'PHYSIQUE-CHIMIE': '', 'NSI': '18'}
{'Nom': 'KTBYW', 'Mentions': 'Compliments', '1/2j abs': '12', 'Rang': '13.5', 'Moyenne Générale': '12.7', 'MATHEMATIQUES': '12.5', 'PHYSIQUE-CHIMIE': '13.9', 'NSI': '14'}
{'Nom': 'VGANB', 'Mentions': 'Compliments', '1/2j abs': '2', 'Rang': '13', 'Moyenne Générale': '13.5', 'MATHEMATIQUES': '13.3', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '15.7'}
{'Nom': 'MXRPG', 'Mentions': 'Pas de mention', '1/2j abs': '7', 'Rang': '13', 'Moyenne Générale': '13.4', 'MATHEMATIQUES': '15.8', 'PHYSIQUE-CHIMIE': '15', 'NSI': '11.1'}
{'Nom': 'CPIZF', 'Mentions': 'Compliments', '1/2j abs': '13', 'Rang': '13.4', 'Moyenne Générale': '15', 'MATHEMATIQUES': '12.5', 'PHYSIQUE-CHIMIE': '12.6', 'NSI': '14.5'}
{'Nom': 'ZWSPZ', 'Mentions': 'Compliments', '1/2j abs': '3', 'Rang': '14', 'Moyenne Générale': '13.5', 'MATHEMATIQUES': '11.3', 'PHYSIQUE-CHIMIE': '9', 'NSI': '17'}
{'Nom': 'UVLPZ', 'Mentions': 'Compliments', '1/2j abs': '', 'Rang': '14', 'Moyenne Générale': '12.9', 'MATHEMATIQUES': '12.4', 'PHYSIQUE-CHIMIE': '8', 'NSI': '10.1'}
{'Nom': 'VZWHE', 'Mentions': 'Compliments', '1/2j abs': '14', 'Rang': '13.1', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '12', 'PHYSIQUE-CHIMIE': '12.6', 'NSI': '20'}
{'Nom': 'FVEWG', 'Mentions': 'Compliments', '1/2j abs': '1', 'Rang': '15', 'Moyenne Générale': '13', 'MATHEMATIQUES': '14.2', 'PHYSIQUE-CHIMIE': '12.5', 'NSI': '11.1'}
{'Nom': 'OYQHD', 'Mentions': 'Compliments', '1/2j abs': '4', 'Rang': '15', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '12.7', 'PHYSIQUE-CHIMIE': '13.5', 'NSI': '10'}
{'Nom': 'HAUAK', 'Mentions': 'Pas de mention', '1/2j abs': '', 'Rang': '15', 'Moyenne Générale': '12.8', 'MATHEMATIQUES': '16', 'PHYSIQUE-CHIMIE': '15', 'NSI': '7.1'}
{'Nom': 'LYHYD', 'Mentions': 'Compliments', '1/2j abs': '2', 'Rang': '16', 'Moyenne Générale': '13.2', 'MATHEMATIQUES': '13.3', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '13.1'}
{'Nom': 'QAKEG', 'Mentions': 'Compliments', '1/2j abs': '5', 'Rang': '16', 'Moyenne Générale': '12.9', 'MATHEMATIQUES': '11.1', 'PHYSIQUE-CHIMIE': '11', 'NSI': '13.3'}
{'Nom': 'FFHOD', 'Mentions': "Mise en garde pour l'assiduité", '1/2j abs': '25', 'Rang': '16', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '10.5', 'PHYSIQUE-CHIMIE': '13', 'NSI': '13.9'}
{'Nom': 'KBYPL', 'Mentions': 'Pas de mention', '1/2j abs': '3', 'Rang': '17', 'Moyenne Générale': '12.8', 'MATHEMATIQUES': '12.9', 'PHYSIQUE-CHIMIE': '14', 'NSI': '14.3'}
{'Nom': 'VBNMW', 'Mentions': 'Compliments', '1/2j abs': '4', 'Rang': '17', 'Moyenne Générale': '13', 'MATHEMATIQUES': '12.6', 'PHYSIQUE-CHIMIE': '11', 'NSI': '13.7'}
{'Nom': 'BQDCH', 'Mentions': 'Compliments', '1/2j abs': '17', 'Rang': '17', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '10.7', 'PHYSIQUE-CHIMIE': '8', 'NSI': '13.2'}
{'Nom': 'IPKWS', 'Mentions': 'Compliments', '1/2j abs': '17', 'Rang': '18', 'Moyenne Générale': '12.5', 'MATHEMATIQUES': '11.4', 'PHYSIQUE-CHIMIE': '12', 'NSI': '10.5'}
{'Nom': 'PKXYT', 'Mentions': 'Pas de mention', '1/2j abs': '33', 'Rang': '18', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '7.7', 'PHYSIQUE-CHIMIE': '12', 'NSI': '14.3'}
{'Nom': 'PCEPU', 'Mentions': 'Pas de mention', '1/2j abs': '46', 'Rang': '18', 'Moyenne Générale': '12.9', 'MATHEMATIQUES': '8.2', 'PHYSIQUE-CHIMIE': '', 'NSI': '14.2'}
{'Nom': 'OFUTJ', 'Mentions': 'Compliments', '1/2j abs': '6', 'Rang': '19', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '10.8', 'PHYSIQUE-CHIMIE': '10.5', 'NSI': '12.5'}
{'Nom': 'MFPNQ', 'Mentions': 'Encouragements', '1/2j abs': '7', 'Rang': '19', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '12', 'PHYSIQUE-CHIMIE': '12.5', 'NSI': '11.2'}
{'Nom': 'YLDOS', 'Mentions': 'Encouragements', '1/2j abs': '21', 'Rang': '19', 'Moyenne Générale': '12.2', 'MATHEMATIQUES': '14', 'PHYSIQUE-CHIMIE': '14', 'NSI': '9.5'}
{'Nom': 'REAJE', 'Mentions': 'Encouragements', '1/2j abs': '4', 'Rang': '20', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '14.2', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '13.7'}
{'Nom': 'DRHQA', 'Mentions': 'Encouragements', '1/2j abs': '4', 'Rang': '20', 'Moyenne Générale': '12.5', 'MATHEMATIQUES': '10.6', 'PHYSIQUE-CHIMIE': '10', 'NSI': '12.3'}
{'Nom': 'UOZMK', 'Mentions': 'Encouragements', '1/2j abs': '16', 'Rang': '20', 'Moyenne Générale': '12.1', 'MATHEMATIQUES': '12.4', 'PHYSIQUE-CHIMIE': '9', 'NSI': '11'}
{'Nom': 'YEXND', 'Mentions': 'Encouragements', '1/2j abs': '3', 'Rang': '21', 'Moyenne Générale': '12.6', 'MATHEMATIQUES': '13.2', 'PHYSIQUE-CHIMIE': '14.5', 'NSI': '13'}
{'Nom': 'XVEXG', 'Mentions': 'Encouragements', '1/2j abs': '6', 'Rang': '21', 'Moyenne Générale': '12.2', 'MATHEMATIQUES': '11.1', 'PHYSIQUE-CHIMIE': '10', 'NSI': '14.4'}
{'Nom': 'IXVPT', 'Mentions': 'Pas de mention', '1/2j abs': '9', 'Rang': '21', 'Moyenne Générale': '11.6', 'MATHEMATIQUES': '13.1', 'PHYSIQUE-CHIMIE': '8', 'NSI': '10'}
{'Nom': 'MNSTZ', 'Mentions': 'Pas de mention', '1/2j abs': '18', 'Rang': '22', 'Moyenne Générale': '11.8', 'MATHEMATIQUES': '12.8', 'PHYSIQUE-CHIMIE': '10.5', 'NSI': '12.8'}
{'Nom': 'MGZUB', 'Mentions': 'Pas de mention', '1/2j abs': '32', 'Rang': '22', 'Moyenne Générale': '11.3', 'MATHEMATIQUES': '12.2', 'PHYSIQUE-CHIMIE': '10', 'NSI': '11'}
{'Nom': 'FIECN', 'Mentions': 'Encouragements', '1/2j abs': '5', 'Rang': '23', 'Moyenne Générale': '12.4', 'MATHEMATIQUES': '11.8', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '10.7'}
{'Nom': 'WQNGX', 'Mentions': 'Pas de mention', '1/2j abs': '9', 'Rang': '23', 'Moyenne Générale': '11.4', 'MATHEMATIQUES': '11.4', 'PHYSIQUE-CHIMIE': '12', 'NSI': '9.6'}
{'Nom': 'RYILJ', 'Mentions': 'Pas de mention', '1/2j abs': '37', 'Rang': '23', 'Moyenne Générale': '11.3', 'MATHEMATIQUES': '16.9', 'PHYSIQUE-CHIMIE': '10', 'NSI': '6.4'}
{'Nom': 'HIURK', 'Mentions': 'Encouragements', '1/2j abs': '2', 'Rang': '24', 'Moyenne Générale': '12.3', 'MATHEMATIQUES': '12.4', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '12'}
{'Nom': 'MDTVZ', 'Mentions': 'Encouragements', '1/2j abs': '7', 'Rang': '24', 'Moyenne Générale': '11', 'MATHEMATIQUES': '10.8', 'PHYSIQUE-CHIMIE': '11', 'NSI': '11.7'}
{'Nom': 'ORETO', 'Mentions': 'Pas de mention', '1/2j abs': '9', 'Rang': '24', 'Moyenne Générale': '11.3', 'MATHEMATIQUES': '9.2', 'PHYSIQUE-CHIMIE': '9.5', 'NSI': '12.6'}
{'Nom': 'BZQWB', 'Mentions': 'Pas de mention', '1/2j abs': '1', 'Rang': '25', 'Moyenne Générale': '10.7', 'MATHEMATIQUES': '9.5', 'PHYSIQUE-CHIMIE': '11.5', 'NSI': '13.1'}
{'Nom': 'WCSQK', 'Mentions': 'Encouragements', '1/2j abs': '2', 'Rang': '25', 'Moyenne Générale': '11.5', 'MATHEMATIQUES': '11', 'PHYSIQUE-CHIMIE': '11', 'NSI': '12.9'}
{'Nom': 'JAHMU', 'Mentions': 'Encouragements', '1/2j abs': '6', 'Rang': '25', 'Moyenne Générale': '10.9', 'MATHEMATIQUES': '11.6', 'PHYSIQUE-CHIMIE': '10', 'NSI': '8.8'}
{'Nom': 'OEVTI', 'Mentions': 'Pas de mention', '1/2j abs': '9', 'Rang': '26', 'Moyenne Générale': '11.2', 'MATHEMATIQUES': '13.8', 'PHYSIQUE-CHIMIE': '12', 'NSI': '8.9'}
{'Nom': 'LZGJO', 'Mentions': 'Encouragements', '1/2j abs': '13', 'Rang': '26', 'Moyenne Générale': '10.6', 'MATHEMATIQUES': '9.2', 'PHYSIQUE-CHIMIE': '8', 'NSI': '11'}
{'Nom': 'IASDL', 'Mentions': 'Encouragements', '1/2j abs': '23', 'Rang': '26', 'Moyenne Générale': '10.5', 'MATHEMATIQUES': '11.6', 'PHYSIQUE-CHIMIE': '10', 'NSI': '12.6'}
{'Nom': 'DAQYJ', 'Mentions': 'Encouragements', '1/2j abs': '2', 'Rang': '27', 'Moyenne Générale': '10.4', 'MATHEMATIQUES': '9.8', 'PHYSIQUE-CHIMIE': '8', 'NSI': '12.6'}
{'Nom': 'IJNTU', 'Mentions': 'Pas de mention', '1/2j abs': '14', 'Rang': '27', 'Moyenne Générale': '10.5', 'MATHEMATIQUES': '10.7', 'PHYSIQUE-CHIMIE': '9', 'NSI': '11.6'}
{'Nom': 'SRXZR', 'Mentions': 'Encouragements', '1/2j abs': '27', 'Rang': '11', 'Moyenne Générale': '9.7', 'MATHEMATIQUES': '10.5', 'PHYSIQUE-CHIMIE': '9.2', 'NSI': '12.5'}
{'Nom': 'NGKWD', 'Mentions': 'Encouragements', '1/2j abs': '11', 'Rang': '28', 'Moyenne Générale': '9.9', 'MATHEMATIQUES': '10.2', 'PHYSIQUE-CHIMIE': '4', 'NSI': '9'}
{'Nom': 'NCEFS', 'Mentions': 'Pas de mention', '1/2j abs': '17', 'Rang': '28', 'Moyenne Générale': '10.6', 'MATHEMATIQUES': '11.8', 'PHYSIQUE-CHIMIE': '8', 'NSI': '13.3'}
{'Nom': 'WWOLI', 'Mentions': 'Encouragements', '1/2j abs': '21', 'Rang': '28', 'Moyenne Générale': '10.4', 'MATHEMATIQUES': '7', 'PHYSIQUE-CHIMIE': '6.5', 'NSI': '12.7'}
{'Nom': 'DUIOL', 'Mentions': 'Pas de mention', '1/2j abs': '28', 'Rang': '28', 'Moyenne Générale': '9.9', 'MATHEMATIQUES': '11.3', 'PHYSIQUE-CHIMIE': '5', 'NSI': '8.5'}
{'Nom': 'TKYOU', 'Mentions': 'Encouragements', '1/2j abs': '3', 'Rang': '29', 'Moyenne Générale': '10.5', 'MATHEMATIQUES': '7.9', 'PHYSIQUE-CHIMIE': '8.5', 'NSI': '10.4'}
{'Nom': 'MIRZQ', 'Mentions': 'Encouragements', '1/2j abs': '3', 'Rang': '29', 'Moyenne Générale': '10.2', 'MATHEMATIQUES': '9.4', 'PHYSIQUE-CHIMIE': '7', 'NSI': '10'}
{'Nom': 'UABBU', 'Mentions': 'Pas de mention', '1/2j abs': '24', 'Rang': '29', 'Moyenne Générale': '10.2', 'MATHEMATIQUES': '9.2', 'PHYSIQUE-CHIMIE': '6', 'NSI': '10.9'}
{'Nom': 'HHXEY', 'Mentions': 'Pas de mention', '1/2j abs': '25', 'Rang': '30', 'Moyenne Générale': '10', 'MATHEMATIQUES': '5.2', 'PHYSIQUE-CHIMIE': '10', 'NSI': '11.6'}
{'Nom': 'BZNHD', 'Mentions': 'Pas de mention', '1/2j abs': '28', 'Rang': '30', 'Moyenne Générale': '9.4', 'MATHEMATIQUES': '11', 'PHYSIQUE-CHIMIE': '11', 'NSI': '9.4'}
{'Nom': 'VQQKZ', 'Mentions': 'Encouragements', '1/2j abs': '2', 'Rang': '31', 'Moyenne Générale': '10.1', 'MATHEMATIQUES': '9.2', 'PHYSIQUE-CHIMIE': '10', 'NSI': '10.2'}
{'Nom': 'WEDTR', 'Mentions': 'Pas de mention', '1/2j abs': '4', 'Rang': '31', 'Moyenne Générale': '9.5', 'MATHEMATIQUES': '8.7', 'PHYSIQUE-CHIMIE': '13.5', 'NSI': '8.1'}
{'Nom': 'UCVFC', 'Mentions': 'Encouragements', '1/2j abs': '12', 'Rang': '31', 'Moyenne Générale': '9', 'MATHEMATIQUES': '8.2', 'PHYSIQUE-CHIMIE': '8', 'NSI': '8.7'}
{'Nom': 'BFQTB', 'Mentions': 'Pas de mention', '1/2j abs': '14', 'Rang': '32', 'Moyenne Générale': '9.4', 'MATHEMATIQUES': '11.8', 'PHYSIQUE-CHIMIE': '10', 'NSI': '5.7'}
{'Nom': 'JICPK', 'Mentions': 'Pas de mention', '1/2j abs': '49', 'Rang': '32', 'Moyenne Générale': '7.7', 'MATHEMATIQUES': '11.6', 'PHYSIQUE-CHIMIE': '9', 'NSI': '1.5'}
{'Nom': 'MCGET', 'Mentions': 'Pas de mention', '1/2j abs': '32', 'Rang': '9', 'Moyenne Générale': '12.3', 'MATHEMATIQUES': '7.5', 'PHYSIQUE-CHIMIE': '10.3', 'NSI': '11'}
{'Nom': 'CQSFR', 'Mentions': 'Pas de mention', '1/2j abs': '33', 'Rang': '9', 'Moyenne Générale': '11.7', 'MATHEMATIQUES': '8', 'PHYSIQUE-CHIMIE': '8.8', 'NSI': '14.5'}

Recherche de lignes

Recherchons les élèves qui ont les félicitations.

# Lecture du fichier csv
with open('./data/notes.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    # Itération sur les lignes du fichier
    for ligne in reader:
        if ligne["Mentions"] == 'Félicitations':
            print(ligne)
{'Nom': 'OBUQW', 'Mentions': 'Félicitations', '1/2j abs': '3', 'Rang': '1', 'Moyenne Générale': '17.4', 'MATHEMATIQUES': '18', 'PHYSIQUE-CHIMIE': '18.5', 'NSI': '17.7'}
{'Nom': 'XYYVQ', 'Mentions': 'Félicitations', '1/2j abs': '5', 'Rang': '1', 'Moyenne Générale': '18.1', 'MATHEMATIQUES': '19.2', 'PHYSIQUE-CHIMIE': '18', 'NSI': '19'}
{'Nom': 'SJOLY', 'Mentions': 'Félicitations', '1/2j abs': '', 'Rang': '1', 'Moyenne Générale': '18.2', 'MATHEMATIQUES': '19.2', 'PHYSIQUE-CHIMIE': '17', 'NSI': '19.1'}
{'Nom': 'CAOZY', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '2', 'Moyenne Générale': '17', 'MATHEMATIQUES': '18.5', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '17.9'}
{'Nom': 'NULRT', 'Mentions': 'Félicitations', '1/2j abs': '2', 'Rang': '2', 'Moyenne Générale': '17.6', 'MATHEMATIQUES': '17.8', 'PHYSIQUE-CHIMIE': '18.5', 'NSI': '17.5'}
{'Nom': 'SATNL', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '2', 'Moyenne Générale': '17', 'MATHEMATIQUES': '17.5', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '18.6'}
{'Nom': 'BXARC', 'Mentions': 'Félicitations', '1/2j abs': '15', 'Rang': '2', 'Moyenne Générale': '18.1', 'MATHEMATIQUES': '19.4', 'PHYSIQUE-CHIMIE': '19', 'NSI': '16.6'}
{'Nom': 'UFXVM', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '3', 'Moyenne Générale': '17.6', 'MATHEMATIQUES': '18.6', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '16.5'}
{'Nom': 'ASLZS', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '3', 'Moyenne Générale': '17.8', 'MATHEMATIQUES': '19.4', 'PHYSIQUE-CHIMIE': '19', 'NSI': '17.8'}
{'Nom': 'PIGCD', 'Mentions': 'Félicitations', '1/2j abs': '9', 'Rang': '3', 'Moyenne Générale': '17.8', 'MATHEMATIQUES': '18.9', 'PHYSIQUE-CHIMIE': '20', 'NSI': '17.6'}
{'Nom': 'NBQVQ', 'Mentions': 'Félicitations', '1/2j abs': '1', 'Rang': '4', 'Moyenne Générale': '16.5', 'MATHEMATIQUES': '17.6', 'PHYSIQUE-CHIMIE': '16.5', 'NSI': '17.2'}
{'Nom': 'IXHGB', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '17.4', 'Moyenne Générale': '17.3', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '17.9', 'NSI': '16'}
{'Nom': 'HKYCU', 'Mentions': 'Félicitations', '1/2j abs': '2', 'Rang': '5', 'Moyenne Générale': '16.4', 'MATHEMATIQUES': '18.1', 'PHYSIQUE-CHIMIE': '17', 'NSI': '17.9'}
{'Nom': 'XRZOA', 'Mentions': 'Félicitations', '1/2j abs': '9', 'Rang': '5', 'Moyenne Générale': '16.6', 'MATHEMATIQUES': '18.3', 'PHYSIQUE-CHIMIE': '17.5', 'NSI': '14.7'}
{'Nom': 'SEXRW', 'Mentions': 'Félicitations', '1/2j abs': '16', 'Rang': '5', 'Moyenne Générale': '17.1', 'MATHEMATIQUES': '17.8', 'PHYSIQUE-CHIMIE': '16', 'NSI': '18.8'}
{'Nom': 'FROXY', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '6', 'Moyenne Générale': '16.3', 'MATHEMATIQUES': '19.3', 'PHYSIQUE-CHIMIE': '17', 'NSI': '15'}
{'Nom': 'MPBWD', 'Mentions': 'Félicitations', '1/2j abs': '7', 'Rang': '6', 'Moyenne Générale': '16.5', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '17', 'NSI': '16.7'}
{'Nom': 'PAZCW', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '16.4', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '17', 'PHYSIQUE-CHIMIE': '16.8', 'NSI': '13.5'}
{'Nom': 'XOWON', 'Mentions': 'Félicitations', '1/2j abs': '3', 'Rang': '7', 'Moyenne Générale': '15.4', 'MATHEMATIQUES': '15.2', 'PHYSIQUE-CHIMIE': '16', 'NSI': '16.4'}
{'Nom': 'XSXJX', 'Mentions': 'Félicitations', '1/2j abs': '8', 'Rang': '7', 'Moyenne Générale': '15.4', 'MATHEMATIQUES': '16.2', 'PHYSIQUE-CHIMIE': '12.5', 'NSI': '16.6'}
{'Nom': 'RRWVF', 'Mentions': 'Félicitations', '1/2j abs': '12', 'Rang': '7', 'Moyenne Générale': '15.5', 'MATHEMATIQUES': '14.4', 'PHYSIQUE-CHIMIE': '15', 'NSI': '16.4'}
{'Nom': 'VFQIV', 'Mentions': 'Félicitations', '1/2j abs': '11', 'Rang': '8', 'Moyenne Générale': '14.5', 'MATHEMATIQUES': '14.4', 'PHYSIQUE-CHIMIE': '13', 'NSI': '10.3'}
{'Nom': 'YPSAM', 'Mentions': 'Félicitations', '1/2j abs': '8', 'Rang': '14.6', 'Moyenne Générale': '13.3', 'MATHEMATIQUES': '14.5', 'PHYSIQUE-CHIMIE': '14.5', 'NSI': '19'}
{'Nom': 'QCTQB', 'Mentions': 'Félicitations', '1/2j abs': '6', 'Rang': '9', 'Moyenne Générale': '14.4', 'MATHEMATIQUES': '14.1', 'PHYSIQUE-CHIMIE': '11', 'NSI': '11.1'}
{'Nom': 'TFIAB', 'Mentions': 'Félicitations', '1/2j abs': '4', 'Rang': '10', 'Moyenne Générale': '13.6', 'MATHEMATIQUES': '14.2', 'PHYSIQUE-CHIMIE': '13', 'NSI': '13.3'}
{'Nom': 'OLQBO', 'Mentions': 'Félicitations', '1/2j abs': '14', 'Rang': '11', 'Moyenne Générale': '13.5', 'MATHEMATIQUES': '12.8', 'PHYSIQUE-CHIMIE': '13', 'NSI': '11.2'}

Affecter les données à une liste

Nous allons stocker les données en mémoire sous forme d’une liste de dictionnaires pour utilisation ultérieure.

# Création de la liste vide
eleves = []

with open('./data/notes.csv') as csvfile: reader = csv.DictReader(csvfile) for ligne in reader: eleves.append(ligne)

# affichage des trois premiers élèves de la liste eleves[:3]

[{'Nom': 'OBUQW',
  'Mentions': 'Félicitations',
  '1/2j abs': '3',
  'Rang': '1',
  'Moyenne Générale': '17.4',
  'MATHEMATIQUES': '18',
  'PHYSIQUE-CHIMIE': '18.5',
  'NSI': '17.7'},
 {'Nom': 'XYYVQ',
  'Mentions': 'Félicitations',
  '1/2j abs': '5',
  'Rang': '1',
  'Moyenne Générale': '18.1',
  'MATHEMATIQUES': '19.2',
  'PHYSIQUE-CHIMIE': '18',
  'NSI': '19'},
 {'Nom': 'SJOLY',
  'Mentions': 'Félicitations',
  '1/2j abs': '',
  'Rang': '1',
  'Moyenne Générale': '18.2',
  'MATHEMATIQUES': '19.2',
  'PHYSIQUE-CHIMIE': '17',
  'NSI': '19.1'}]

On peut maintenant facilement travailler avec les données, par exemple, compter les félicitations.

len([eleve for eleve in eleves if eleve['Mentions'] == 'Félicitations'])
26

Recherche de doublons

Vérifions qu’il n’y a pas deux lignes identiques qui se sont glissées par erreur dans le fichier csv.

Pour cela nous allons utiliser une liste annexe vus qui rencence les lignes déjà vues lors de l’itération.

vus = []
for eleve in eleves:
    # vérifie que l'entrée n'a pas déjà été vue
    assert eleve not in vus
    # ajout de l'élève à vus
    vus.append(eleve)
# Si on arrive au but de l'itération
# c'est qu'il n'y a pas de doublons
print("Pas de doublons")
Pas de doublons