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:
- 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.
- 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 :
- 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)
- 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)
- csv.field_size_limit(): Cette méthode renvoie la limite de taille des champs en bytes.
- csv.field_size_limit(): Il renvoie la taille de champ maximale actuelle autorisée par l'analyseur.
- 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.
- csv.get_dialect(): Renvoie le dialecte associé à un nom.
- csv.list_dialects(): Cette méthode permet de récupérer la liste des dialectes enregistrés dans le module csv.
- csv.list_dialects(): Renvoie les noms de tous les dialectes enregistrés.
- csv.QUOTE_* (): Ces constantes sont utilisées pour définir la manière de gérer les caractères de citation.
- csv.QUOTE_ALL(): Il demande aux objets écrivain de citer tous les champs.
- 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.
- csv.QUOTE_NONE(): Il indique à l'objet écrivain de ne jamais citer les champs.
- csv.QUOTE_NONNUMERIC(): Il demande aux objets écrivain de citer tous les champs non numériques.
- 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)
- csv.reader.line_num(): Cette propriété contient le numéro de la ligne actuelle lue par le csv.reader.
- csv.reader.next(): Cette méthode est similaire à csv.reader.next() mais est utilisée pour les itérateurs Python.
- 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.
- 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.
- csv.register_dialect(): Il associe le dialecte à un nom, et le nom doit être une chaîne ou un objet Unicode.
- 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.
- 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)
- csv.writer.writerow(): Cette méthode permet d'écrire une ligne dans un fichier CSV. Elle prend en argument une liste ou un tuple.
- 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.
- csv.writer(): Écrire les données dans un fichier csv
- csv.writerow(): Cette méthode permet d'écrire une ligne dans un fichier CSV. Elle prend en argument une liste ou un tuple.
- 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:
1 2 3 4 5 | data.csv ID , Nom , Age , Taille 1 , Natalie , 22 , 170 2 , Robert , 37 , 190 3 , Bernard , 29 , 181 |
Exemple: lecture totale
1 2 3 4 5 6 7 8 9 10 11 12 13 | import csv with open('data.csv', 'r') as f: reader = csv.reader(f , delimiter=',') for row in reader: print (row) """ Cela affiche le contenu total du fichiers csv où chaque ligne est représentée par une liste. [' ID ', ' Nom ', ' Age ', ' Taille'] [' 1 ', ' Natalie ', ' 22 ', ' 170'] [' 2 ', ' Robert ', ' 37 ', ' 190'] [' 3 ', ' Bernard\t ', ' 29 ', ' 181'] """ |
Exemple lecture d'une colonne spécifique
1 2 3 4 5 6 7 | import csv with open('data.csv', 'r') as f: reader = csv.reader(f , delimiter=',') print("Liste des noms : ") for row in reader: print (row[1]) # Cela affiche la liste des noms de la table. |
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():
1 2 3 4 5 6 7 8 9 10 11 12 | import csv with open('data.csv', 'r') as f: reader = csv.DictReader(f , delimiter=',') for row in reader: print (row) """ output: OrderedDict([(' ID', ' 1 '), (' Nom ', ' Natalie '), (' Age ', ' 22 '), (' Taille', ' 170')]) OrderedDict([(' ID', ' 2 '), (' Nom ', ' Robert '), (' Age ', ' 37 '), (' Taille', ' 190')]) OrderedDict([(' ID', ' 3 '), (' Nom ', ' Bernard '), (' Age ', ' 29 '), (' Taille', ' 181')]) """ |
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 :
1 | pip install pandas |
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:
1 2 3 4 5 6 7 8 9 10 | import pandas result = pandas.read_csv('data.csv') print(result) """ output: ID Nom Age Taille 0 1 Walid 19 180 1 2 Najib 30 185 2 3 Majda 27 175 """ |
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
1 2 3 4 5 6 7 8 9 10 11 | import csv data = [['ID', 'Nom', 'Age', 'Taille'] , ['1', 'Walid', '19', '180'], ['2', 'Najib', '30', '185'], ['3', 'Majda', '27', '175']] with open('data.csv', mode='w') as file: writer = csv.writer(file, delimiter=',') # write data for ligne in data: writer.writerow(ligne) |
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
1 2 3 4 5 6 7 8 9 10 11 12 | from pandas import DataFrame # data sous forme d'un dictionnaire dictData = {'ID': [1 , 2 , 3], 'Nom': ['Robert', 'Albert', 'Natalie'], 'Age': [23, 37, 21], 'Taille': [180 , 175 , 170], } dataFrm = DataFrame(dictData, columns= ['ID', 'Nom', 'Age', 'Taille']) # chemin vers un fichier pour stocker les resultats export_csv = dataFrm .to_csv (r'Pandaresult.csv', index = None, header=False) print (dataFrm ) |
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ère | Module csv | Module json |
|---|---|---|
| Format | CSV | JSON |
| Structure principale | Tableau composé de lignes et de colonnes | Objets, tableaux et structures imbriquées |
| Extension habituelle | .csv | .json |
| Lecture | csv.reader(), csv.DictReader() | json.load(), json.loads() |
| Écriture | csv.writer(), csv.DictWriter() | json.dump(), json.dumps() |
| Données imbriquées | Peu adapté | Très adapté |
| Types des données | Les champs sont généralement lus comme des chaînes avec csv.reader() | Conserve naturellement plusieurs types : nombres, booléens, listes, objets et null |
| Organisation | Colonnes généralement identifiées par une ligne d'en-tête | Données identifiées par les clés des objets |
| Séparateur | Virgule, point-virgule, tabulation ou autre délimiteur | Syntaxe JSON normalisée |
| Usage fréquent | Tableurs, exports, statistiques et données tabulaires | API, configuration et applications web |
| Structures complexes | Difficiles à représenter | Naturellement 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.
1 2 3 4 | nom,age,ville,note Amine,21,Oujda,15.5 Sara,20,Rabat,17 Yassine,22,Fès,13.5 |
Sortie :
1 | Un tableau contenant quatre colonnes et trois lignes de données. |
Le module csv permet de parcourir ce fichier avec csv.reader(). Chaque ligne est alors retournée sous forme d'une liste Python.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", encoding="utf-8", newline="") as fichier: lecteur = csv.reader(fichier) for ligne in lecteur: print(ligne) |
Sortie :
1 2 3 4 | ['nom', 'age', 'ville', 'note'] ['Amine', '21', 'Oujda', '15.5'] ['Sara', '20', 'Rabat', '17'] ['Yassine', '22', 'Fès', '13.5'] |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [ { "nom": "Amine", "age": 21, "ville": "Oujda", "note": 15.5 }, { "nom": "Sara", "age": 20, "ville": "Rabat", "note": 17 }, { "nom": "Yassine", "age": 22, "ville": "Fès", "note": 13.5 } ] |
Sortie :
1 | Une liste JSON contenant trois objets représentant les étudiants. |
La fonction json.load() permet de lire le fichier et de convertir automatiquement sa structure en objets Python.
1 2 3 4 5 6 7 | import json with open("etudiants.json", encoding="utf-8") as fichier: etudiants = json.load(fichier) for etudiant in etudiants: print(etudiant["nom"], etudiant["age"], etudiant["note"]) |
Sortie :
1 2 3 | Amine 21 15.5 Sara 20 17 Yassine 22 13.5 |
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.
1 2 | print(type(etudiants[0]["age"])) print(type(etudiants[0]["note"])) |
Sortie :
1 2 | <class 'int'> <class 'float'> |
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.
1 2 3 4 5 6 7 8 9 10 | { "nom": "Amine", "age": 21, "adresse": { "ville": "Oujda", "pays": "Maroc" }, "notes": [15, 17, 18], "competences": ["Python", "HTML", "Django"] } |
Sortie :
1 2 3 4 5 6 7 8 | Objet étudiant ├── nom : Amine ├── age : 21 ├── adresse │ ├── ville : Oujda │ └── pays : Maroc ├── notes : [15, 17, 18] └── competences : ['Python', 'HTML', 'Django'] |
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.
1 2 3 4 | id,nom,age,ville,note 1,Amine,21,Oujda,15.5 2,Sara,20,Rabat,17 3,Yassine,22,Fès,13.5 |
Sortie :
1 | Trois lignes de données organisées selon cinq colonnes. |
Avec csv.DictReader(), chaque ligne peut également être manipulée à l'aide des noms des colonnes plutôt que de leurs indices.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", encoding="utf-8", newline="") as fichier: lecteur = csv.DictReader(fichier) for etudiant in lecteur: print(etudiant["nom"], etudiant["ville"]) |
Sortie :
1 2 3 | Amine Oujda Sara Rabat Yassine Fès |
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.
1 2 3 4 5 6 7 8 9 10 11 12 | { "utilisateur": { "id": 125, "nom": "Amine", "actif": true }, "roles": ["etudiant", "membre"], "cours": { "python": 80, "django": 65 } } |
Sortie :
1 2 3 4 | Un objet JSON contenant : - un objet utilisateur - une liste de rôles - un objet cours |
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 JSON | Type Python |
|---|---|
| objet | dict |
| tableau | list |
| chaîne | str |
| nombre entier | int |
| nombre réel | float |
| true | True |
| false | False |
| null | None |
Le programme suivant illustre ces conversions automatiques en utilisant json.loads() pour convertir une chaîne JSON en dictionnaire Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import json texte = ''' { "nom": "Amine", "age": 21, "note": 15.5, "actif": true, "telephone": null } ''' donnees = json.loads(texte) for cle, valeur in donnees.items(): print(cle, ":", valeur, "-", type(valeur).__name__) |
Sortie :
1 2 3 4 5 | nom : Amine - str age : 21 - int note : 15.5 - float actif : True - bool telephone : None - NoneType |
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.
1 | lecteur = csv.reader(fichier) |
Sortie :
1 | Un objet lecteur CSV permettant de parcourir les lignes du fichier. |
Avec JSON, json.load() lit un document JSON depuis un fichier et le désérialise en objets Python.
1 | donnees = json.load(fichier) |
Sortie possible :
1 | Une liste, un dictionnaire ou une autre valeur Python correspondant au document JSON. |
La fonction json.loads() réalise une opération comparable à partir d'une chaîne de caractères contenant du JSON.
1 2 | donnees = json.loads('{"nom": "Amine", "age": 21}') print(donnees) |
Sortie :
1 | {'nom': 'Amine', 'age': 21} |
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.
1 2 3 4 5 6 | import csv with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nom", "age", "note"]) writer.writerow(["Amine", 21, 15.5]) |
Sortie :
1 2 | nom,age,note Amine,21,15.5 |
Pour JSON, la fonction json.dump() sérialise un objet Python et écrit directement le résultat dans un fichier.
1 2 3 4 5 6 7 8 9 10 | import json etudiant = { "nom": "Amine", "age": 21, "note": 15.5 } with open("etudiant.json", "w", encoding="utf-8") as fichier: json.dump(etudiant, fichier, ensure_ascii=False, indent=4) |
Sortie :
1 2 3 4 5 | { "nom": "Amine", "age": 21, "note": 15.5 } |
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.
1 2 3 4 5 6 | import json etudiant = {"nom": "Amine", "age": 21} texte = json.dumps(etudiant, ensure_ascii=False) print(texte) |
Sortie :
1 | {"nom": "Amine", "age": 21} |
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”