Lire un fichier CSV et liste de listes Python
Nous allons utiliser ce fichier CSV suivant :
Fichier CSV utilisé
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 |
Méthode : Lecture avec l'objet reader
Il s'agit de la méthode standard de lecture d'un fichier CSV. On suppose aussi que les 2 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)
Remarque :
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
.
>>> annee = '2005'
>>> type(annee)
<class 'str'>
>>> annee = int(annee)
>>> annee
2005
>>> type(annee)
<class '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( )
, cf la remarque sur ce cours.
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).
Méthode : Lecture en manipulant une liste de listes
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)}.")
Rappel :
Avec une version de python >3.6, rappelons que les lignes d'appel à print
seront plutôt :
print("La ligne 0 du fichier: {}.".format(lignes[0]))
print("La ligne 1 du fichier: {}.".format(lignes[1]))
print("Le nombre de lignes du fichier: {}.".format(len(lignes)))
ou encore plus basiquement :
print("La ligne 0 du fichier: ", lignes[0])
print("La ligne 1 du fichier: ", lignes[1])
print("Le nombre de lignes du fichier: ", len(lignes))
Simulation :
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.
On peut donc passer aux exercices de la page suivante !