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.
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)
Remarque
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).
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