Formats de données : csv
Les fichiers csv sont des fichiers textes permettant de stocker des données structurées comme une feuille excel.
Le format csv est utilisé pour stocker des données sous la forme d'une table. Par exemple :
Prénom, nom, note
Harry, Cover, 12.5
Alain, Bessil, 7
Elvire, Sacuti, 15
Aimée, Nêms, 20
Gordon, Zola, 10
Un fichier csv :
- est un fichier texte
- chaque ligne du fichier est composée d'une donnée
- chaque donnée est composée de champs séparés par un délimiteur
- chaque donnée à :
- le même nombre de champs
- le même délimiteur
Format csv
Le format csv peut sembler bien défini, mais il n'en est rien.
Il est crucial de toujours soigneusement vérifier le format csv de vos données.
Par exemple :
- Le délimiteur est par défaut une
,
, mais peut tout aussi bien être un;
(par défaut lorsque l'on exporte un fichier au format csv depuis un excel en langue française), une tabulations, voir un espace. - Pour pouvoir distinguer les chaines de caractères des nombres, par défaut une chaîne de caractères sera entourée de
"
. Mais ce n'est pas toujours le cas - la fin de ligne, qui est un caractère spécial est interprété différents sous unix (
\n
), sous windows (deux caractères\r\n
) et sous les vieux systèmes mac avant Macos, donc vous n'en croiserez plus souvent (caractère\r
).
Enfin :
- la première ligne est souvent spéciale car contenant le nom des différents attributs (colonnes)
- la première colonne peut contenir l'identifiant de la donnée
En python, tout ceci est bien sur paramétrable.
Utilisez un plugin vscode pour pouvoir visualiser clairement les fichiers csv.
Il en existe de nombreux. J'ai installé le tout simple rainbow CSV pour rapidement connaître le format csv d'un fichier particulier.
Python et fichier csv
Pour la suite, on supposera que l'on ait dans le dossier du projet courant le fichier notes.csv
contenant :
Prénom, nom, note
Harry, Cover, 12.5
Alain, Bessil, 7
Elvire, Sacuti, 15
Aimée, Nêms, 20
Gordon, Zola, 10
Lecture d'un fichier
le code ci-après lit le fichier csv et le place dans une liste de listes si la ligne contient bien 3 champs. Puis on convertit le dernier élément en entier.
import csv
donnees = []
f = open("notes.csv", newline='')
lecteur = csv.reader(f)
for ligne in lecteur:
donnees.append(ligne)
Par défaut, tout attribut sera considéré comme une chaîne de caractères. Il faut convertir chaque champ à son bon type. Si vous voulez traiter à part les chaînes de caractères, il faut les entourer de "
.
import csv
pour pouvoir utiliser le modulecsv
- ouvrir le fichier à lire avec
open
avec une gestion de la fin de ligne. - placer ce fichier dans un
reader
dont le but est de lire le fichier et de le structurer en utilisant ses paramètres. - lire le fichier ligne à ligne. A chaque utilisation vous obtiendrez une liste contenant les différents champs de la ligne lue.
Le reader python permet de lire une chaîne de caractères et de l'interpréter selon le format csv. Il possède de nombreuses options permettant de gérer les multiples cas particuliers. Parmi les plus usités :
delimiter
. Par défaut c'est des','
, mais on verra souvent en France des csv dont le délimiteur est un';'
(car les virgules sont déjà utilisés pour les nombres réels)quotechar
: pour savoir ce qui est une chaîne de caractères, souvent des"
.
Séparer les noms de colonne des données
Pour lire une unique ligne, on peut utiliser la commande next
. Le code suivant lit la première ligne, qui contient les noms des différentes colonnes, puis lit les autres données en transformant le dernier champ (la note) en float
.
import csv
donnees = []
f = open("notes.csv")
lecteur = csv.reader(f)
titres = next(lecteur) # lit une unique ligne
for ligne in lecteur: # continue la lecture
ligne[2] = float(ligne[2]) # convertit la note en flottant
donnees.append(ligne)
Le lecteur de csv fonctionne avec tout itérateur. Il fonctionne donc aussi en remplaçant le fichier f
par une liste de chaînes de caractères par exemple.
Écrire des fichiers csv
Ajoutons la note de Mlle Debbie Scott qui a eu 13.5
Il faut ouvrir le fichier en ajout. Si vous l'ouvrez juste en écriture tout votre fichier disparaît.
import csv
with open('notes.csv', 'a', newline='') as f:
écrivain = csv.writer(f)
écrivain.writerow(['Debbie', 'Scott', 13.5])
Exercices
Codes postaux
Téléchargez la base officielle des codes postaux au format csv à partir de cette page.
En utilisant ce fichier csv :
- Quel est le format de ce fichier ?
- Ouvrez ce fichier et déterminez :
- A quel code postal est associé la charmante bourgade d'OTTERSWILLER ?
- Combien de fois apparaît la ville de Marseille dans le fichier ? Et pourquoi ?
Prénoms
En utilisant cette page, récupérez le fichier des naissances en France (hors Mayotte) depuis 1900.
En utilisant ce fichier :
- Quel le prénom le plus donné chez les garçons et chez les filles l'année de votre naissance ? Et en 2022 ?
- Représentez graphiquement l'évolution au cours du temps (de l'année 1900 à 2022) de votre prénom (ou d'un prénom que vous aimez bien)
Utilisez-maintenant le fichier des prénoms ventilés par département :
Créez un dictionnaire dont les clés sont le numéro de département et la valeur, le nombre de fois où votre prénom a été donné dans ce département pour toutes les années.
Dans quel département votre prénom a-t-il été le plus donné ?