Lire un fichier CSV et liste de listes Python

Nous allons utiliser ce fichier CSV suivant :

Personnes (csv)

Vous pouvez ouvrir le fichier personnes.csv avec un éditeur de texte ou un tableur pour visualiser son contenu.

Le séparateur de données est la virgule.

Le contenu est le suivant :

id_personne nom prenom anneeNaissance
1 Labrosse Adam 2000
2 Gemlamorte Adèle 1985
3 Auboisdormant Abel 2001
4 Etpan Ahmed 1975
5 Térieur Alain 1999
6 Térieur Alex 1976
7 Proviste Alain 2000
8 Verse Alain 1970
9 Ception Alex 2001
10 Ainé Ali 1975
11 Gator Ali 2001
12 Bistraux Alonzo 2001
13 Patamob Alphonse 1970
14 Ficulté Andy 1980
15 Rectdustade Andy 2000
16 Verserre Annie 2001
17 Boréal Aurore 1985
18 Nor Paul 1985
19 Dejeu Bernadette 2001
20 Dajeun Bruno 1984
21 Hiple Candice 2000

Lecture avec l'objet reader

Il s'agit de la méthode standard de lecture d'un fichier CSV. On suppose aussi que les deux fichiers sont dans le même dossier.

import csv

# ouverture en lecture du fichier csv
with open('personnes.csv', newline='') as fichier:
    # on crée un objet reader
    lecture = csv.reader(fichier, delimiter=',')

    # lecture et affichage des lignes:
    for ligne in lecture:
        print(ligne)
  • Chaque ligne est une liste.
  • Vous remarquerez que les éléments des listes-lignes sont des chaînes de caractère. Si l'on veut par exemple que l'année de naissance soit un entier, il faudra utiliser int().

Attention

L'objet reader n'est pas une liste ou un tuple: il permet d'itérer sur les lignes du fichier. C'est un itérateur ou iterable en anglais, relisez le cours de 1ère, il se comporte comme l'objet range( ).

Par exemple, on ne peut pas appeler lecture[2] pour obtenir la ligne 3 du fichier, cela provoquerait une erreur : tout ce que l'on peut faire a priori est un parcours de lecture élément par élément (c'est à dire un parcours du fichier ligne par ligne).

On peut toutefois transformer l'objet reader en liste :

import csv

# ouverture en lecture du fichier csv
with open('personnes.csv', newline='') as fichier:
    # on crée un objet reader
    lecture = csv.reader(fichier, delimiter=',')

    # on transforme l'itérateur en liste:
    lignes = list(lecture)

print(f"La ligne 0 du fichier: {lignes[0]}.")
print(f"La ligne 1 du fichier: {lignes[1]}.")
print(f"Le nombre de lignes du fichier: {len(lignes)}.")

On obtient donc :

La ligne 0 du fichier: ['id_personne', 'nom', 'prenom', 'anneeNaissance'].
La ligne 1 du fichier: ['1', 'Labrosse', 'Adam', '2000'].
Le nombre de lignes du fichier: 22.

On remarquera que notre objet lignes est maintenant une liste de listes.