Lire un fichier CSV et dictionnaire python
On va ouvrir le même fichier personnes.csv et effectuer des tâches assez proches de celles de la page précédente mais en utilisant cette fois une structure de dictionnaire Python.
Le contenu du fichier personnes.csv n'a pas changé.
Méthode : Lecture du fichier avec un dictionnaire
Python nous autorise aussi à travailler avec un dictionnaire pour chaque ligne. L'avantage de ce choix est que l'on va pouvoir rappeler l'en-tête des colonnes du fichier CSV à l'aide des clefs du dictionnaire.
import csv
# ouverture en lecture du fichier csv
with open('personnes.csv', newline='') as fichier:
# on crée un objet DictReader
lecture = csv.DictReader(fichier, delimiter=',')
# quelques affichages:
for ligne in lecture:
print(ligne['nom'])
Comme précédemment, l'objet DictReader est un itérateur : on le transformera en liste pour accéder directement par les numéros de ligne :
import csv
# ouverture en lecture du fichier csv
with open('personnes.csv', newline='') as fichier:
# on crée un objet DictReader
lecture = csv.DictReader(fichier, delimiter=',')
# transfo en liste
lignes = list(lecture)
for ligne in lignes:
print(ligne)
Fondamental :
La ligne 0 d'entête qui pouvait nous gêner avec l'objet reader a maintenant disparu (l'en-tête est utilisée pour les noms des clefs, ce n'est pas considéré comme une donnée).
Exemple :
Le début du résultat de la précédente lecture :
[('id_personne', '1'), ('nom', 'Labrosse'), ('prenom', 'Adam'), ('anneeNaissance', '2000')]
[('id_personne', '2'), ('nom', 'Gemlamorte'), ('prenom', 'Adèle'), ('anneeNaissance', '1985')]
[('id_personne', '3'), ('nom', 'Auboisdormant'), ('prenom', 'Abel'), ('anneeNaissance', '2001')]
[('id_personne', '4'), ('nom', 'Etpan'), ('prenom', 'Ahmed'), ('anneeNaissance', '1975')]
Si l'on veut afficher par exemple le nom de la personne d'identifiant égal à 3 :
import csv
# ouverture en lecture du fichier csv
with open('personnes.csv', newline='') as fichier:
# on crée un objet DictReader
lecture = csv.DictReader(fichier, delimiter=',')
# transfo en liste
lignes = list(lecture)
def nom_d_identifiant(identifiant):
"""
identifiant -- entier naturel (identifiant d'une personne)
renvoie le nom de la personne ayant identifiant
pour valeur de id_personne.
"""
for personne in lignes:
if int(personne['id_personne']) == identifiant:
return personne['nom']
# on renvoie None si l'identifiant n'existe pas:
return None
# test
print(nom_d_identifiant(3))
On obtient donc :
Auboisdormant
On peut donc passer aux exercices de la page suivante !