Contexte

Les différentes activités réalisées jusqu'à maintenant ne permettaient pas de sauvegarder les données dans un fichier.

En effet, lorsque python traite des données, elles sont mémorisées dans la mémoire vive (RAM) de l'ordinateur et sont perdues dès que l'IDE python est fermé.

Dans cette activité, vous allez apprendre à lire et écrire dans un fichier CSV et à mémoriser ces informations en python.

Rappel CSV : Comma-separated values

Préparation du travail

Vous devez avoir le fichier CSV et le fichier python dans le même dossier :

- Créer un nouveau dossier python : Traitement données en table.

- Télécharger le fichier ExempleTableCsv1.csv et placer le répertoire précédemment créé.

Pour mémoire votre fichier peut s'ouvrir avec un tableur ou un éditeur de texte :

exempleTable1CsvTableur

Aperçu dans un tableur

exempleTable1CsvTtText

Aperçu dans un éditeur de texte

Lire des donnée d'un fichier CSV

Tester le code suivant :

#--importation bibliothèque csv
import csv
#--Documentation : https://docs.python.org/fr/3/library/csv.html

#=====Définition des fonctions==========================================
#-----------Fonction importation d'un fichier CSV
#fichier : nom du fichier à lire
def import_csv(fichier):
    #fichier est le nom du fichier sans extension
    #open(fichier+ '.csv','r') : ouvrir le fichier
    #dont l'extension est '.csv' en mode lecture 'r' comme read
    lecteur = csv.DictReader(open(fichier + '.csv','r'))
    return [dict(ligne) for ligne in lecteur]

#======Programme principal=============================================
#---essai d'importation d'un fichier CSV existant
NoteEleve= import_csv('ExempleTableCsv1')
print(NoteEleve)

Exercices

a- Quel est le type de donnée de NoteEleve ?

Type données de NoteEleve :
Tuple de liste
Tuple
Dictionnaire
Tuple de liste de dictionnaire
Liste
Tuple de dictionnaire
Liste de dictionnaire

b- Comment s'appelle l'écriture de la ligne 13 ?

c- Proposer une écriture avec des boucles for...in... de cette ligne 13.

 Ecrire dans un fichier CSV

Ecriture en vidant le fichier avant

Tester le code suivant :

#--importation bibliothèque csv
import csv
#--Documentation : https://docs.python.org/fr/3/library/csv.html

#=====Définition des fonctions==========================================
#-----------Fonction importation d'un fichier CSV
#fichier : nom du fichier à lire
def import_csv(fichier):
    #fichier est le nom du fichier sans extension
    #open(fichier+ '.csv','r') : ouvrir le fichier
    #dont l'extension est '.csv' en mode lecture 'r' comme read
    lecteur = csv.DictReader(open(fichier + '.csv','r'))
    return [dict(ligne) for ligne in lecteur]

#------------Fonction exportation dans un fichier CSV
#nom : chaine de caractères du nom du fichier
#et aussi grâce à eval(nom) la liste de dictionnaire
#ordre : liste des attributs (ou labels) des colonnes
def export_csv(nom,ordre):
    #ouverture du fichier en écriture 'w' comme write enécrasant les données précédentes
    with open(nom+'.csv','w') as fichier:
        #prépare l'écriture dans le fichier
        dic= csv.DictWriter(fichier,fieldnames=ordre)
        #eval(nom) permet d'interpréter nom comme une variable et non comme une string
        table= eval(nom)
        #---écriture de la 1ère ligne du fichier CSV : les attributs
        dic.writeheader()
        #---boucle pour chaque dictionnaire
        for ligne in table:
            #écriture de chaque dictionnaire dans une nouvelle ligne du fichier
            dic.writerow(ligne)

#======Programme principal=============================================
#---importation d'un fichier CSV existant
NoteEleve= import_csv('ExempleTableCsv1')
print(NoteEleve)

#---essai d'exportation d'une liste de dictionnaire
export_csv('NoteEleve',['Nom','Maths','Anglais','Info'])

Vérifier que le contenu du fichier NoteEleve.csv est :

exportCsvEx1

d- En examinant le commentaire de la ligne 20 et de la documentation de la bibliothèque CSV, que faudrait-il comme paramètre d'accès au fichier pour écrire à la fin du fichier afin d'ajouter d'autres élèves ?

Quel paramètre d'accès du fichier faut-il ?
a
w
f
r

Ecriture en ajoutant les informations à la fin du fichier

Compléter alors le code de la fonction ajout_export_csv() afin que le tableau eleve soit ajouter à la fin du fichier NoteEleve.

#--importation bibliothèque csv
import csv
#--Documentation : https://docs.python.org/fr/3/library/csv.html
#--données élèves à ajouter
eleve=[{'Nom': 'Jules', 'Anglais': '11', 'Info': '13', 'Maths': '7'}]

#=====Définition des fonctions==========================================
#------------Fonction ajout exportation dans un fichier CSV
#nomFichier : chaine de caractères du nom du fichier
#nomTab : tableau de dictionnaires des notes des élèves à ajouter
#ordre : liste des attributs (ou labels) des colonnes
def ajout_export_csv(nomFichier,nomTab,ordre):
    ...
    ...
    ...

#======Programme principal=============================================
#---essai d'exportation d'une liste de dictionnaire
ajout_export_csv('NoteEleve','eleve',['Nom','Maths','Anglais','Info'])

Lancer le programme et vérifier que le contenu du fichier NoteEleve.csv est :

exportCsvEx2

Vous pouvez tester l'ajout des notes de 2 élèves afin de vérifier qu'elles sont bien enregistrées dans le fichier NoteEleve.csv.