Le module csv Python

le module csv de manipulation des fichiers en python
 

1. Description du module csv

Le module csv de Python fournit une fonctionnalité pour travailler avec des fichiers CSV (Comma Separated Values). Il fournit deux classes principales pour lire et écrire des fichiers CSV : csv.reader et csv.writer:

  1. La classe csv.reader vous permet de lire un fichier CSV en tant que liste de listes, où chaque liste interne représente une ligne dans le fichier.
  2. La classe csv.writer vous permet d'écrire des données dans un fichier CSV, avec chaque ligne de données étant écrite comme une ligne séparée dans le fichier.

Le module comprend également un certain nombre d'autres fonctions pour travailler avec des fichiers CSV, telles que la possibilité de définir le délimiteur et le caractère de citation utilisés dans le fichier, et pour gérer les sauts de ligne à l'intérieur des champs.

2. Stockage des données sur un fichier csv

Prenons un petit exemple simple d'une table sql formée de 4 colonnes et quelque enregistrements. Pour stocker les données de cette table, le principe est très simple, il suffit de mettre chaque ligne de la table dans une ligne séparée sur le fichier csv et de séparer les valeurs par une virgule: d'où le sigle CSV, 'comma separated values' qui veut dire 'valeurs séparées par des virgules'

 

3. Les méthodes associées au module Python csv

Les principales méthodes associées au module csv Python sont :

  1. csv.DictReader(): Cette méthode permet de lire un fichier CSV en tant que liste de dictionnaires. Cette méthode prend en argument un objet de type file ou un nom de fichier (str)
  2. csv.DictWriter(): Cette méthode permet d'écrire des données dans un fichier CSV à partir d'un dictionnaire. Elle prend en argument un objet de type file ou un nom de fichier (str)
  3. csv.field_size_limit(): Cette méthode renvoie la limite de taille des champs en bytes.
  4. csv.field_size_limit(): Il renvoie la taille de champ maximale actuelle autorisée par l'analyseur.
  5. csv.get_dialect(): Cette méthode permet de récupérer un dialecte enregistré en utilisant son nom. Elle prend en argument un nom de dialecte.
  6. csv.get_dialect(): Renvoie le dialecte associé à un nom.
  7. csv.list_dialects(): Cette méthode permet de récupérer la liste des dialectes enregistrés dans le module csv.
  8. csv.list_dialects(): Renvoie les noms de tous les dialectes enregistrés.
  9. csv.QUOTE_* (): Ces constantes sont utilisées pour définir la manière de gérer les caractères de citation.
  10. csv.QUOTE_ALL(): Il demande aux objets écrivain de citer tous les champs.
  11. csv.QUOTE_MINIMAL(): Il instruit les objets écrivain pour ne citer que les champs qui contiennent des caractères spéciaux tels que quotechar, delimiter, etc.
  12. csv.QUOTE_NONE(): Il indique à l'objet écrivain de ne jamais citer les champs.
  13. csv.QUOTE_NONNUMERIC(): Il demande aux objets écrivain de citer tous les champs non numériques.
  14. csv.reader(): Cette méthode permet de lire un fichier CSV en tant que liste de listes, où chaque liste interne représente une ligne dans le fichier. Elle prend en argument un objet de type file ou un nom de fichier (str)
  15. csv.reader.line_num(): Cette propriété contient le numéro de la ligne actuelle lue par le csv.reader.
  16. csv.reader.next(): Cette méthode est similaire à csv.reader.next() mais est utilisée pour les itérateurs Python.
  17. csv.reader.next(): Cette méthode permet de lire la prochaine ligne d'un fichier CSV. Elle est utilisée pour parcourir un fichier ligne par ligne.
  18. csv.register_dialect(): Cette méthode permet de créer un dialecte personnalisé pour le module csv. Elle prend en argument un nom de dialecte et un dictionnaire de paramètres.
  19. csv.register_dialect(): Il associe le dialecte à un nom, et le nom doit être une chaîne ou un objet Unicode.
  20. csv.unregister_dialect(): Il supprime le dialecte qui est associé au nom du registre de dialecte. Si un nom n'est pas un nom de dialecte enregistré, une erreur est déclenchée.
  21. csv.writer(): Cette méthode permet d'écrire des données dans un fichier CSV, avec chaque ligne de données étant écrite comme une ligne séparée dans le fichier. Elle prend en argument un objet de type file ou un nom de fichier (str)
  22. csv.writer.writerow(): Cette méthode permet d'écrire une ligne dans un fichier CSV. Elle prend en argument une liste ou un tuple.
  23. csv.writer.writerows(): Cette méthode permet d'écrire plusieurs lignes dans un fichier CSV. Elle prend en argument une liste de listes ou de tuples.
  24. csv.writer(): Écrire les données dans un fichier csv
  25. csv.writerow(): Cette méthode permet d'écrire une ligne dans un fichier CSV. Elle prend en argument une liste ou un tuple.
  26. csv.writerows(): Cette méthode permet d'écrire plusieurs lignes dans un fichier CSV. Elle prend en argument une liste de listes ou de tuples.

Ces méthodes sont les plus utilisées mais il y en a d'autres qui sont plus spécifiques. Il est toujours possible de consulter la documentation officielle pour plus de détails.

 

4. Lecture d'un fichier csv

4.1 - Lecture sous forme d'une liste via la méthode csv.reader()

Pour extraire des données d'un fichier CSV, vous devez utiliser la fonction de lecture csv.reader pour générer un objet contenant les données de lecture. La méthode de lecture csv.reader est conçue pour prendre chaque ligne du fichier et faire une liste de toutes les colonnes. Ensuite, vous choisissez simplement la colonne pour laquelle vous voulez obtenir les données sous forme de variables. Cela semble beaucoup plus compliqué qu'il ne l'est. Pour le prouver, regardons un exemple: Essayons de lire le contenu d'un fichier nommé data.csv:

Exemple: lecture totale

Exemple lecture d'une colonne spécifique

4.2 - Lecture sous forme d'un dictionnaire via la méthode csv.Dictreader()

Pour lire un fichier csv sous forme d'un dictionnaire, le principe est le même que celui du paragraphe précédent, mais à la différence de remplacer la méthode csv.reader() par la méthode csv.DictReader():

4.3 - Lecture d'un fichier CSV avec Pandas

Pandas est une bibliothèque open source qui vous permet d'effectuer des manipulations de données en Python, elle vous offrent un moyen facile de créer, manipuler et supprimer les données. Vous devez installer la bibliothèque pandas avec la commande :

Sous Windows, vous exécuterez cette commande dans l'invite de commande, tandis que sous Linux dans le terminal. La lecture d'un CSV dans un DataFrame pandas est très rapide et facile:

 

5. Ecrire sur fichier CSV

Pour écrire sur un fichier csv en Python, on utilise la méthode: csv.writer() afin de créer un objet d'écriture et pour écrire une ligne, on utilise la méthode writerow():

Exemple

 

6. Lecture d'un fichier csv avec Panda

Pandas permet aussi d'écrire sur un fichier csv des données provenant d'un dictionnaire Python via la classe DataFrame.

Exemple

Voici les données qui seront écrites sur le fichiers Pandaresult.csv:

 

7. CSV Versus JSON

Les modules csv et json appartiennent tous les deux à la bibliothèque standard de Python. Ils permettent de lire, écrire et échanger des données, mais ils correspondent à deux modèles de données très différents : CSV est particulièrement adapté aux données tabulaires, tandis que JSON permet de représenter des structures beaucoup plus riches et imbriquées.

7.1 Comparaison générale

CritèreModule csvModule json
FormatCSVJSON
Structure principaleTableau composé de lignes et de colonnesObjets, tableaux et structures imbriquées
Extension habituelle.csv.json
Lecturecsv.reader(), csv.DictReader()json.load(), json.loads()
Écriturecsv.writer(), csv.DictWriter()json.dump(), json.dumps()
Données imbriquéesPeu adaptéTrès adapté
Types des donnéesLes champs sont généralement lus comme des chaînes avec csv.reader()Conserve naturellement plusieurs types : nombres, booléens, listes, objets et null
OrganisationColonnes généralement identifiées par une ligne d'en-têteDonnées identifiées par les clés des objets
SéparateurVirgule, point-virgule, tabulation ou autre délimiteurSyntaxe JSON normalisée
Usage fréquentTableurs, exports, statistiques et données tabulairesAPI, configuration et applications web
Structures complexesDifficiles à représenterNaturellement prises en charge

7.2 Même information représentée en CSV

Considérons des étudiants possédant un nom, un âge, une ville et une note. Avec CSV, ces informations sont naturellement représentées sous forme de lignes et de colonnes.

Sortie :

Le module csv permet de parcourir ce fichier avec csv.reader(). Chaque ligne est alors retournée sous forme d'une liste Python.

Sortie :

Avec csv.reader(), les valeurs des champs sont ici récupérées sous forme de chaînes de caractères. Si nous souhaitons effectuer des calculs sur l'âge ou la note, il faudra donc utiliser des conversions comme int() ou float().

7.3 Même information représentée en JSON

Avec JSON, les mêmes étudiants peuvent être représentés par une liste contenant plusieurs objets. Les noms des propriétés sont directement intégrés à la structure.

Sortie :

La fonction json.load() permet de lire le fichier et de convertir automatiquement sa structure en objets Python.

Sortie :

Contrairement à la lecture précédente avec csv.reader(), les nombres présents dans le document JSON sont directement convertis vers des types numériques Python.

Sortie :

7.4 JSON permet des structures imbriquées

L'une des différences les plus importantes entre CSV et JSON concerne la représentation des structures complexes. CSV correspond essentiellement à un modèle tabulaire, alors que JSON permet naturellement d'imbriquer des objets et des listes.

Un étudiant peut par exemple posséder une adresse structurée, plusieurs notes et une liste de compétences.

Sortie :

Une telle structure est naturelle en JSON. Avec CSV, il faudrait aplatir les données ou adopter une convention particulière pour placer des listes et des objets dans certaines cellules.

7.4 CSV est particulièrement adapté aux tableaux

Lorsqu'un fichier contient un très grand nombre de lignes possédant toujours les mêmes colonnes, CSV constitue une solution simple et naturelle. Il convient notamment aux listes d'étudiants, produits, commandes, ventes, mesures ou résultats statistiques.

Sortie :

Avec csv.DictReader(), chaque ligne peut également être manipulée à l'aide des noms des colonnes plutôt que de leurs indices.

Sortie :

Cette manière de travailler rapproche la manipulation des données CSV de celle des dictionnaires Python obtenus après la lecture d'un fichier JSON.

7.5 JSON est particulièrement adapté aux API

Le format JSON est très utilisé dans les applications web et les API, car il permet de transmettre des structures complexes entre différentes applications.

Une API peut par exemple retourner un utilisateur accompagné de ses rôles et de sa progression dans plusieurs cours.

Sortie :

Cette structure hiérarchique serait beaucoup moins naturelle à représenter dans un fichier CSV classique.

7.6 Correspondance entre les types JSON et Python

Le module json effectue automatiquement plusieurs conversions entre les types JSON et les types Python.

Type JSONType Python
objetdict
tableaulist
chaînestr
nombre entierint
nombre réelfloat
trueTrue
falseFalse
nullNone

Le programme suivant illustre ces conversions automatiques en utilisant json.loads() pour convertir une chaîne JSON en dictionnaire Python.

Sortie :

7.7 Comparer les fonctions de lecture

Le module csv et le module json ne suivent pas exactement la même logique. Avec CSV, csv.reader() crée un lecteur permettant de parcourir progressivement les lignes du fichier.

Sortie :

Avec JSON, json.load() lit un document JSON depuis un fichier et le désérialise en objets Python.

Sortie possible :

La fonction json.loads() réalise une opération comparable à partir d'une chaîne de caractères contenant du JSON.

Sortie :

7.8 Comparer les fonctions d'écriture

Pour écrire des données au format CSV, le module csv fournit notamment csv.writer(). La méthode writerow() permet d'écrire une ligne.

Sortie :

Pour JSON, la fonction json.dump() sérialise un objet Python et écrit directement le résultat dans un fichier.

Sortie :

Le module json propose également json.dumps(), qui sérialise un objet Python en chaîne de caractères JSON au lieu de l'écrire directement dans un fichier.

Sortie :

7.9 Quel module choisir ?

Le choix entre csv et json dépend principalement de la structure des données et de leur utilisation. Les deux modules sont davantage complémentaires que concurrents.

  • Choisissez csv pour des données essentiellement tabulaires organisées en lignes et colonnes.
  • CSV convient particulièrement aux listes d'étudiants, produits, ventes, notes, mesures et statistiques.
  • CSV est très pratique pour les données destinées aux tableurs ou aux exports et imports de données.
  • Choisissez json lorsque les données possèdent une structure hiérarchique ou imbriquée.
  • JSON permet naturellement de représenter des dictionnaires, listes, nombres, booléens et valeurs nulles.
  • JSON est particulièrement courant pour les API, les applications web et certains fichiers de configuration.
  • Pour une grande table homogène, CSV est généralement plus naturel et souvent plus compact.
  • Pour représenter une structure complexe composée d'objets et de listes imbriqués, JSON est généralement beaucoup plus adapté.

La différence fondamentale entre les deux formats peut finalement être formulée simplement : CSV représente principalement un tableau, tandis que JSON représente une structure de données.

Dans un projet Django ou Flask, les deux formats peuvent parfaitement coexister. JSON peut par exemple servir aux échanges de données avec une API, tandis que CSV peut servir à importer ou exporter un grand nombre d'enregistrements sous forme tabulaire.

 

8. Conclusion

J'espère que maintenant vous avez appris les différentes techniques permettant de lire & écrire sur des fichiers csv. Les fichiers CSV sont largement utilisés dans les applications logicielles car ils sont faciles à lire et à gérer, et leur petite taille les rend relativement rapides pour le traitement et la transmission des données. Le module csv fournit diverses méthodes et classes qui vous permettent de lire et d'écrire facilement sur un fichier csv. Et si vous souhaitez approfondir vos connaissances à propos du module csv, vous pouvez consulter la documentation officielle de Python. Nous pouvons donc conclure que CSV est le meilleur moyen pour enregistrer, visualiser et envoyer des données.

Voir Aussi:

 


Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/


1 thought on “Le module csv Python”

Leave a Reply

Your email address will not be published. Required fields are marked *