Chapitre 11 : Tables et import csv.

Introduction :

Un tableur rempli de milliers de lignes : des élèves, leurs notes, leurs classes. À l'œil nu, impossible d'en tirer quoi que ce soit rapidement.

Comment faire lire un tel fichier à un programme, pour qu'il réponde tout seul à des questions comme « quelle est la moyenne de la classe ? » ou « qui a plus de 15 ? » Encore faut-il que la machine sache où s'arrête une donnée et où commence la suivante…

1. Les listes de listes

En programmation, une liste de listes est une structure de données qui permet de stocker des éléments sous forme de tableaux à plusieurs dimensions. Chaque élément de la liste principale est en fait une liste elle-même.

2. Exercice : création d'une liste de listes.

Stockez ce tableau sous forme d’une liste de listes nommée personnes en Python.

Nom Prénom Âge
Durand Jean 32
Vignu Mauricette 89
Vignu Capucine 9
Vander Louise 17

    
>>>

3. Exercice : recherche d'un élément dans une liste de listes.

Écrivez une fonction est_present qui prend en entrée une liste de listes de caractères ainsi qu’un caractère. La fonction doit renvoyer True si ce caractère est présent, et False sinon.

Par exemple, avec la liste ci-dessous :

alphabet_listes = [
    ['D', 'B', 'C'],
    ['F', 'A', 'E'],
    ['H', 'G', 'I']
]

On doit obtenir :

>>> est_present(alphabet_listes,'E')
True
>>> est_present(alphabet_listes,"Z")
False
alphabet_listes = [ ['D', 'B', 'C'], ['F', 'A', 'E'], ['H', 'G', 'I'] ] def est_present(liste_de_listes, caractere): for sous_liste in liste_de_listes: for .... in .....: if ... == ... : return True return ... carac = "I" print(f"Présence du caractère '{carac}' : {est_present(alphabet_listes, carac)}.")

    
>>>

4. Exercice : somme des éléments de chaque sous-liste.

Compléter une fonction somme_des_sous_listes prenant comme paramètre une liste de listes de nombres et renvoyant une nouvelle liste contenant la somme de chaque sous-liste.

Exemple attendu :

>>> somme_des_sous_listes([[1,2,3],[4,5,6]])
[6, 15]
listes_de_nbs = [ [871, 234, 689, 527, 412, 932, 165, 633, 972, 499, 286, 440, 729, 160, 898, 285, 657, 776, 799, 832], [810, 369, 991, 469, 147, 933, 657, 305, 785, 376, 603, 617, 361, 732, 774, 864, 515, 609, 275, 739], [831, 210, 573, 804, 220, 872, 706, 691, 896, 748, 119, 463, 492, 417, 935, 963, 707, 543, 860, 271], [223, 763, 181, 847, 217, 968, 165, 215, 484, 551, 620, 878, 392, 120, 754, 485, 444, 392, 292, 225], [180, 389, 525, 871, 556, 241, 581, 720, 637, 853, 480, 500, 183, 920, 288, 878, 364, 414, 194, 480], [657, 168, 197, 964, 470, 848, 524, 700, 580, 172, 257, 813, 899, 784, 874, 238, 462, 713, 248, 785], [582, 907, 199, 312, 256, 737, 299, 210, 493, 912, 931, 398, 666, 800, 982, 931, 900, 341, 117, 899], [880, 226, 767, 586, 180, 918, 457, 609, 102, 274, 183, 291, 882, 364, 378, 822, 498, 190, 960, 213], [949, 243, 906, 297, 600, 223, 370, 468, 757, 791, 973, 646, 931, 516, 707, 806, 781, 414, 434, 977], [775, 526, 550, 819, 830, 739, 898, 139, 921, 355, 274, 259, 919, 434, 924, 221, 697, 193, 769, 182] ] def somme_des_sous_listes(liste): # à compléter liste_sommes = somme_des_sous_listes(listes_de_nbs) print(liste_sommes) for indice, somme in enumerate(liste_sommes): print(f"somme de la sous liste N°{indice + 1} : {somme}")

    
>>>

5. Exercice : moyenne des éléments de chaque sous-liste.

Écrire une fonction Python appelée calculer_moyenne_listes qui prend en paramètre une liste de listes de nombres et renvoie une nouvelle liste contenant la moyenne de chaque sous-liste.

Exemple :

>>> calculer_moyenne_listes([[1,2,3],[4,5,6]])
[2.0, 5.0]
listes_de_nbs = [ [10, 20, 30, 40], [5, 15, 25, 35, 45], [100, 200], [7, 14, 21, 28, 35, 42, 49] ] def calculer_moyenne_listes(liste): moyennes = [] ....... liste_moyennes = calculer_moyenne_listes(listes_de_nbs) print(liste_moyennes) for indice, moy in enumerate(liste_moyennes): print(f"Moyenne de la sous liste N°{indice + 1} : {moy}")

    
>>>

6. Exercice : plus grand élément d'une liste de listes.

Écrire une fonction plus_grand prenant comme paramètre une liste de listes de nombres et renvoyant le plus grand nombre contenu dans toutes les sous-listes.

Exemple :

>>> plus_grand([[1,2,3],[10,5,8]])
10
listes_de_nbs = [ [871, 234, 689, 527, 412, 932, 165, 633, 972, 499, 286, 440, 729, 160, 898, 285, 657, 776, 799, 832], [810, 369, 991, 469, 147, 933, 657, 305, 785, 376, 603, 617, 361, 732, 774, 864, 515, 609, 275, 739], [831, 210, 573, 804, 220, 872, 706, 691, 896, 748, 119, 463, 492, 417, 935, 963, 707, 543, 860, 271], [223, 763, 181, 847, 217, 968, 165, 215, 484, 551, 620, 878, 392, 120, 754, 485, 444, 392, 292, 225], [180, 389, 525, 871, 556, 241, 581, 720, 637, 853, 480, 500, 183, 920, 288, 878, 364, 414, 194, 480], [657, 168, 197, 964, 470, 848, 524, 700, 580, 172, 257, 813, 899, 784, 874, 238, 462, 713, 248, 785], [582, 907, 199, 312, 256, 737, 299, 210, 493, 912, 931, 398, 666, 800, 982, 931, 900, 341, 117, 899], [880, 226, 767, 586, 180, 918, 457, 609, 102, 274, 183, 291, 882, 364, 378, 822, 498, 190, 960, 213], [949, 243, 906, 297, 600, 223, 370, 468, 757, 791, 973, 646, 931, 516, 707, 806, 781, 414, 434, 977], [775, 526, 550, 819, 830, 739, 898, 139, 921, 355, 274, 259, 919, 434, 924, 221, 697, 193, 769, 182] ] def plus_grand(liste): maxi = ........ print(f"Le plus grand nombre contenu dans les sous-listes est {plus_grand(listes_de_nbs)}.")

    
>>>

7. Introduction

Nous appellerons "table" une structure de données comportant des données.

Dans ce chapitre, dans Python, une table sera soit :

Comme par exemple :

Nom Prénom âge
Durand Jean 32
Vignu Mauricette 89
Vignu Capucine 9
Vander Louise 17

8. Le format CSV

Le format CSV (Comma Separated Values, ou « valeurs séparées par des virgules ») est un format de fichier texte utilisé pour stocker des données sous forme de tableau.

Chaque ligne du fichier correspond à une ligne du tableau, et les valeurs sont séparées par un caractère (souvent la virgule , ou le point-virgule ;).

Exemple de fichier CSV :

Nom;Age;Classe
Alice;15;2nde
Bob;16;1ère
Charlie;17;Terminale

Les fichiers CSV sont très utilisés car ils sont simples à créer et à lire, et peuvent être ouverts dans de nombreux logiciels (Excel, LibreOffice, Python, etc.).

9. Importation d'un fichier csv dans Python

Le langage Python permet d'accéder au contenu d'un fichier csv à l'aide de la bibliothèque csv.

Les commandes sont un peu complexes au début donc les voici :

import os
os.chdir("U:\\") # a modifier

import csv

def export_vers_csv(nom_fichier,liste):
    with open(nom_fichier, 'w',encoding='utf-8',newline='') as fichier:
        writer = csv.writer(fichier)
        writer.writerows(liste)



def import_depuis_csv(nom_fichier):
    liste=[]
    with open(nom_fichier, 'r',encoding='utf-8',newline='') as fichier:
        reader=csv.reader(fichier)
        for ligne in reader:
                    liste.append(ligne)
    return liste

10. Activité

  1. Télécharger cette liste d'élèves d'un lycée : eleves.csv
  2. Créer la fonction nb_eleve(liste) qui retourne le nombre d'élèves.