Page 10

Manipulation de fichiers CSV

Python permet d'extraire des données contenues dans un CSV et donc d'un fichier tableur (Excel ou Libre Office)

Quel Intéret ?

Après avoir récupéré des données dans le cadre de l'OpenData, les élèves vont pouvoir traiter ces données lors d'activités de statistiques ou de probabilités.

Dans un tableur on crée un tableau de notes.

FenetreTableur

On remarque tout d'abord que les valeurs contenues dans ce tableau sont entières. Lorsqu'elles seront décimales, il faudra peut-être utiliser la fonction replace(',','.') qui permet de remplacer une virgule par un point. En effet, le séparateur décimale dans un tableur est la virgule alors que c'est le point en Python. On pourra lire à ce sujet la page 10bis qui explique comment gérer cette situation. Voir le bouton vert en bas de page.
On souhaite enregistrer ce fichier sous le format csv en le nommant Tableur1.csv
Pour cela, il suffit de faire Fichier/Enregistrer sous/ puis de choisir le type csv et de le nommer Tableur1.
Si on ouvre ce fichier, on obtient dans la première colonne les 7 lignes que nous avons entrées dans le tableur, les différents données étant séparées par des virgules.

Noms,Maths,Français,Histoire
Achille,12,14,15
Bertille,17,11,9
Carole,15,15,16
Damien,11,13,12
Eric,19,15,18
Fabrice,14,17,17

Nous allons récupérer, ces données avec Python, les traités puis créer un nouveau fichier dans lequel on aura ajouter une ligne avec un nouvel élève et une colonne dans laquelle on aura les moyennes des élèves.

Pour plus de renseignements sur le la manipulation des fichiers csv :

https://docs.python.org/3/library/csv.html

Ouverture d'un fichier CSV



#ouverture d'un fichier CSV...
#... création de la liste des lignes nommée tableau...
#... et affichage des lignes.
import csv
with open('tableur.csv',newline='') as f:         #Ouverture du fichier CSV
    tableau=[]
    lire=csv.reader(f)                            #chargement des lignes du fichier csv
    print('',end='\n')
    print('Affichage des lignes du tableau',end='\n')
    for ligne in lire:                            #Pour chaque ligne... 
        print(ligne, end='\n')                    #...affichage de la ligne dans la console ...
        tableau.append(ligne)                     #...on ajoute la ligne dans la liste ...
                                                  #...de liste nommée tableau

		

Création d'un fichier à partir de la liste tableau



#Création d'un fichier à partir de la liste tableau
with open('tableur1.csv','w',newline='') as f:  #Ouverture du fichier CSV en écriture
    ecrire=csv.writer(f)                        # préparation à l'écriture
    for i in tableau:                           # Pour chaque ligne du tableau...  
        ecrire.writerow(i)                # Mettre dans la variable ecrire cette nouvelle ligne      
print('',end='\n')
print('longueur du tableau : ',len(tableau))

Ajout d'une ligne


#Ajout d'une ligne
with open('tableur1.csv','a',newline='') as f:       #Ajout d'une ligne dans le fichier csv
    ecrire=csv.writer(f)                             # préparation à l'écriture   
    ecrire.writerow(['Gilles','15','13','9'])        # Mettre dans écrire cette nouvelle ligne 

		

Fonction moyenne


#Fonction moyenne
def moy(list):
    s=0
    n=len(list)
    for k in range(0,n):
        s=s+int(list[k])
    #print('s=',s,'n=',n,'moyenne=',s/n)
    return s/n

		

Récupération des notes de chaque élève et calcul de la moyenne des notes des élèves


tab_moy=[]
for i in range(1,len(tableau)):       #Pour chaque élève..
    liste=tableau[i][1:]              #...on crée une liste avec ses notes...
    tab_moy.append(moy(liste))        # ...on calcule sa moyenne et on la met dans tab_moy... 
    tableau[i].append(moy(liste))     #...puis ajoute cette moyenne à la liste de ses notes...  
tableau[0].append('Moyenne')          #Ajout du libélé de la colonne moyenne

print('',end='\n')
print('colonne des moyennes : ',end='\n')
print(tab_moy)
print(tableau)
    return s/n

		

Ajout de la moyenne des élèves dans le fichiers tableur qui vient d'être créé


with open('tableur3.csv','w',newline='') as f:   #Ouverture du fichier CSV en écriture
    ecrire=csv.writer(f)
    for i in tableau:
        ecrire.writerow(i)

		

Certains fichiers CSV peuvent contenir des valeurs décimales. Dans la page suivante on explique la méthode qui permet de gérer cette situation. Cette page sera utilise notamment pour un usage en sciences physiques.

Gestion des fichiers CSV avancée (page 10bis)




Page 10