Manipulation de fichiers csv⚓︎
définition
Les fichiers CSV (pour Comma Separated Values
) sont des fichiers-texte (ils ne contiennent aucune mise en forme) utilisés pour stocker des données, séparées par des virgules (ou des points-virgules, ou des espaces...). Il n'y a pas de norme officielle du CSV.
🔽 Télécharger le notebook de cours correspondant ici
Ouverture d'un fichier CSV par des logiciels classiques⚓︎
- Télécharger le fichier eleve.csv
- Ouvrir avec le Bloc-Notes ce fichier.
- Rajouter une ligne avec une personne supplémentaire, sauvegarder le fichier.
- Ouvrir le fichier avec un tableur.
aperçu
Sur un tableau ou en mode Texte
Exploitation d'un fichier CSV en Python avec le module CSV⚓︎
L'utilisation d'un tableur peut être délicate lorsque le fichier CSV comporte un très grand nombre de lignes.
Python permet de lire et d'extraire des informations d'un fichier CSV même très volumineux, grâce à des modules dédiés, comme le bien-nommé csv
(utilisé ici) ou bien pandas
(qui sera vu plus tard).
Le logiciel Jupyter Notebook
se prête parfaitement à la consultation et l'exploitation de données structurées, nous l'utiliserons préféremment à Spyder
.
Première méthode⚓︎
Le script suivant :
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
donne :
['Nom', 'Anglais', 'Info', 'Maths']
['Joe', '17', '18', '19']
['Zoe', '15', '17', '19']
['Max', '19', '13', '17']
Problèmes
- Les données ne sont pas structurées : la première ligne est la ligne des «descripteurs» (ou des «champs»), alors que les lignes suivantes sont les valeurs de ces descripteurs.
- La variable
donnees
n'est pas exploitable en l'état. Ce n'est pas une structure connue. C'est unobjet
un peu complexe.
Améliorations⚓︎
Au lieu d'utiliser la fonction csv.reader()
, utilisons csv.DictReader()
. Comme son nom l'indique, elle renverra une variable contenant des dictionnaires.
Le script suivant :
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
donne
{'Prénom': 'John', 'Nom': 'Smith', 'Email': 'john@example.com', 'SMS': '33123456789'}
{'Prénom': 'Harry', 'Nom': 'Pierce', 'Email': 'harry@example.com', 'SMS': '33111222222'}
{'Prénom': 'Howard', 'Nom': 'Paige', 'Email': 'howard@example.com', 'SMS': '33777888898'}
C'est mieux ! Les données sont maintenant des dictionnaires. Mais nous avons juste énuméré 3 dictionnaires. Comment ré-accéder au premier d'entre eux, celui de John Smith ? Essayons :
>>> donnees[0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-9914ab00321e> in <module>
----> 1 donnees[0]
TypeError: 'DictReader' object does not support indexing
Pas simple à parcourir, non ?
Une liste de dictionnaires⚓︎
Nous allons donc créer une liste de dictionnaires.
Le script suivant (un classique pour la lecture des fichiers CSV) 💙 :
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
permet de faire ceci :
>>> amis
[{'Prénom': 'John',
'Nom': 'Smith',
'Email': 'john@example.com',
'SMS': '33123456789'},
{'Prénom': 'Harry',
'Nom': 'Pierce',
'Email': 'harry@example.com',
'SMS': '33111222222'},
{'Prénom': 'Howard',
'Nom': 'Paige',
'Email': 'howard@example.com',
'SMS': '33777888898'}]
>>> print(amis[0]['Email'])
john@example.com
>>> print(amis[2]['Nom'])
Paige
Un fichier un peu plus intéressant : les joueurs de rugby du TOP14⚓︎
Le fichier top14.csv
contient tous les joueurs du Top14 de rugby, saison 2019-2020, avec leur date de naissance, leur poste, et leurs mensurations.
Ce fichier a été généré par Rémi Deniaud, de l'académie de Bordeaux.
Question 1. Stocker dans une variable joueurs
les renseignements de tous les joueurs présents dans ce fichier csv.
réponse
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 |
|
Première analyse⚓︎
Question 2. Combien de joueurs sont présents dans ce fichier ?
réponse
>>> len(joueurs)
595
Question 3. Quel est le prénom du joueur n°486 ?
réponse
>>> joueurs[486]['Nom']
'Wenceslas LAURET'
Extraction de données particulières⚓︎
Question 4. Où joue Baptiste SERIN ?
La méthode la plus naturelle est de parcourir toute la liste jusqu'à trouver le bon joueur, puis d'afficher son équipe.
réponse
>>> for joueur in joueurs :
if joueur['Nom'] == 'Baptiste SERIN' :
print(joueur['Equipe'])
Une méthode plus efficace est d'utiliser une liste par compréhension incluant un test.
réponse
>>> clubSerin = [joueur['Equipe'] for joueur in joueurs if joueur['Nom'] == 'Baptiste SERIN']
>>> clubSerin
Question 5. Qui sont les joueurs de plus de 140 kg ?
Attention à bien convertir en entier la chaine de caractère renvoyée par la clé Poids
réponse
>>> lourds = [(joueur['Nom'], joueur['Poids']) for joueur in joueurs if int(joueur['Poids']) > 140]
>>> lourds
Exploitation graphique⚓︎
Nous allons utiliser le module Matplotlib pour illustrer les données de notre fichier csv.
Exemple⚓︎
🐍 Script Python | |
---|---|
1 2 3 4 5 6 |
|
Application⚓︎
Question 1. Afficher sur un graphique tous les joueurs de rugby du top14, en mettant le poids en abscisse et la taille en ordonnée.
réponse
🐍 Script Python | |
---|---|
1 2 3 4 5 |
|
Question 2. Faire apparaître ensuite les joueurs évoluant au poste de Centre en bleu, et les 2ème lignes en vert.
réponse
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|