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. |
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"
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
csv
en PythonPython 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'}
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'}
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
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