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