- À propos de l'écriture dans un fichier CSV avec csv.writer()
- Créer un fichier CSV avec csv.writer()
- Écrire une ligne avec writerow()
- Écrire plusieurs lignes avec writerows()
- Écrire un en-tête et des données dans un fichier CSV
- Choisir le séparateur avec delimiter
- Ajouter des données à un fichier CSV existant
- Écrire correctement les chaînes contenant des séparateurs et des guillemets
- Écrire des données Python dans un fichier CSV
- À retenir !
1. À propos de l'écriture dans un fichier CSV avec csv.writer()
Le module standard csv de Python permet de lire mais également d'écrire des fichiers CSV. Le format CSV est particulièrement adapté aux données organisées sous forme de lignes et de colonnes, comme des listes d'étudiants, des produits, des commandes, des résultats ou des données destinées à être importées dans un tableur.
Pour écrire un fichier CSV, le module fournit la fonction csv.writer(). Celle-ci reçoit un fichier ouvert en écriture et retourne un objet writer possédant notamment les méthodes writerow() et writerows().
Le programme suivant importe le module csv et vérifie qu'il est disponible.
1 2 3 | import csv print("Module chargé :", csv.__name__) |
Sortie :
1 | Module chargé : csv |
La méthode writerow() écrit une seule ligne, tandis que writerows() permet d'écrire plusieurs lignes à partir d'un itérable contenant plusieurs séquences.
2. Créer un fichier CSV avec csv.writer()
Pour créer un fichier CSV, nous utilisons open() avec le mode "w". Si le fichier n'existe pas, Python le crée. S'il existe déjà, son ancien contenu est remplacé. Pour le module csv, l'utilisation de newline="" est recommandée afin de laisser le module gérer correctement les fins de ligne.
Le programme suivant crée le fichier etudiants.csv et initialise un objet writer.
1 2 3 4 5 6 | import csv with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) print("Fichier CSV créé.") |
Sortie :
1 | Fichier CSV créé. |
À ce stade, le fichier existe mais il est encore vide, car aucune donnée n'a été transmise à l'objet writer.
Nous pouvons vérifier son existence avec le module pathlib.
1 2 3 4 | from pathlib import Path fichier = Path("etudiants.csv") print("Le fichier existe :", fichier.exists()) |
Sortie :
1 | Le fichier existe : True |
Le bloc with ferme automatiquement le fichier à la fin de l'écriture. Cette méthode est donc préférable à une ouverture manuelle suivie d'un appel explicite à close().
3. Écrire une ligne avec writerow()
La méthode writerow() permet d'écrire une seule ligne dans un fichier CSV. Elle reçoit généralement une liste ou un tuple contenant les différentes valeurs à placer dans les colonnes.
Le programme suivant écrit une ligne d'en-tête contenant quatre noms de colonnes.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nom", "age", "ville", "note"]) print("En-tête écrit dans le fichier.") |
Sortie :
1 | En-tête écrit dans le fichier. |
Le contenu du fichier etudiants.csv devient alors :
1 | nom,age,ville,note |
Sortie :
1 | Une ligne contenant quatre colonnes séparées par des virgules. |
Nous pouvons appeler plusieurs fois writerow() pour écrire successivement plusieurs enregistrements.
1 2 3 4 5 6 7 8 9 | import csv with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nom", "age", "ville", "note"]) writer.writerow(["Amine", 21, "Oujda", 15.5]) writer.writerow(["Sara", 20, "Rabat", 17]) print("Trois lignes ont été écrites.") |
Sortie :
1 | Trois lignes ont été écrites. |
Le fichier obtenu contient alors l'en-tête suivi de deux étudiants.
1 2 3 | nom,age,ville,note Amine,21,Oujda,15.5 Sara,20,Rabat,17 |
Sortie :
1 | Le fichier contient une ligne d'en-tête et deux lignes de données. |
4. Écrire plusieurs lignes avec writerows()
Lorsque plusieurs lignes sont déjà regroupées dans une liste, il n'est pas nécessaire d'appeler writerow() pour chaque ligne. La méthode writerows() permet d'écrire plusieurs enregistrements en une seule instruction.
Commençons par préparer une liste contenant plusieurs étudiants. Chaque sous-liste représente une ligne du futur fichier CSV.
1 2 3 4 5 6 7 8 | etudiants = [ ["Amine", 21, "Oujda", 15.5], ["Sara", 20, "Rabat", 17], ["Yassine", 22, "Fès", 13.5], ["Lina", 19, "Casablanca", 18] ] print("Nombre d'étudiants :", len(etudiants)) |
Sortie :
1 | Nombre d'étudiants : 4 |
Nous pouvons maintenant utiliser writerow() pour l'en-tête puis writerows() pour écrire toutes les lignes de données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import csv etudiants = [ ["Amine", 21, "Oujda", 15.5], ["Sara", 20, "Rabat", 17], ["Yassine", 22, "Fès", 13.5], ["Lina", 19, "Casablanca", 18] ] with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nom", "age", "ville", "note"]) writer.writerows(etudiants) print("Données enregistrées.") |
Sortie :
1 | Données enregistrées. |
Le fichier généré contient maintenant toutes les lignes.
1 2 3 4 5 | nom,age,ville,note Amine,21,Oujda,15.5 Sara,20,Rabat,17 Yassine,22,Fès,13.5 Lina,19,Casablanca,18 |
Sortie :
1 | Une ligne d'en-tête suivie de quatre lignes de données. |
writerows() est donc particulièrement pratique lorsqu'un programme possède déjà les données dans une liste de listes, une liste de tuples ou un autre itérable compatible.
5. Écrire un en-tête et des données dans un fichier CSV
Dans de nombreux fichiers CSV, la première ligne contient les noms des colonnes. Cette ligne facilite la compréhension du fichier et permet ensuite d'utiliser des outils comme csv.DictReader().
Une bonne pratique consiste à séparer l'en-tête des données dans deux variables avant de les écrire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import csv entete = ["nom", "age", "ville", "note"] donnees = [ ["Amine", 21, "Oujda", 15.5], ["Sara", 20, "Rabat", 17], ["Yassine", 22, "Fès", 13.5], ["Lina", 19, "Casablanca", 18] ] with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(entete) writer.writerows(donnees) print("Fichier CSV terminé.") |
Sortie :
1 | Fichier CSV terminé. |
Nous pouvons ensuite relire le fichier avec csv.reader() afin de vérifier les données réellement enregistrées.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.reader(fichier) for ligne in lecteur: print(ligne) |
Sortie :
1 2 3 4 5 | ['nom', 'age', 'ville', 'note'] ['Amine', '21', 'Oujda', '15.5'] ['Sara', '20', 'Rabat', '17'] ['Yassine', '22', 'Fès', '13.5'] ['Lina', '19', 'Casablanca', '18'] |
Nous constatons que les nombres écrits dans le fichier sont récupérés comme des chaînes lors d'une lecture classique avec csv.reader(). Un fichier CSV est en effet un fichier texte et ne conserve pas les types Python comme int ou float.
6. Choisir le séparateur avec delimiter
Le nom CSV signifie historiquement Comma-Separated Values, mais la virgule n'est pas le seul séparateur utilisé. De nombreux fichiers emploient le point-virgule, notamment dans des contextes où la virgule sert de séparateur décimal.
Le paramètre delimiter de csv.writer() permet de choisir le caractère utilisé pour séparer les champs. L'exemple suivant utilise un point-virgule.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import csv produits = [ ["Clavier", 25.90, 12], ["Souris", 15.50, 30], ["Écran", 189.00, 8] ] with open("produits.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier, delimiter=";") writer.writerow(["produit", "prix", "stock"]) writer.writerows(produits) print("Fichier créé avec le séparateur ;") |
Sortie :
1 | Fichier créé avec le séparateur ; |
Le contenu du fichier produits.csv utilise maintenant des points-virgules entre les différentes colonnes.
1 2 3 4 | produit;prix;stock Clavier;25.9;12 Souris;15.5;30 Écran;189.0;8 |
Sortie :
1 | Les champs du fichier sont séparés par des points-virgules. |
Lors de la lecture de ce fichier, il faudra naturellement utiliser le même séparateur.
1 2 3 4 5 6 7 | import csv with open("produits.csv", "r", encoding="utf-8", newline="") as fichier: lecteur = csv.reader(fichier, delimiter=";") for ligne in lecteur: print(ligne) |
Sortie :
1 2 3 4 | ['produit', 'prix', 'stock'] ['Clavier', '25.9', '12'] ['Souris', '15.5', '30'] ['Écran', '189.0', '8'] |
7. Ajouter des données à un fichier CSV existant
Le mode "w" remplace le contenu existant du fichier. Pour ajouter de nouvelles lignes sans supprimer les anciennes, nous utilisons le mode "a", qui signifie append.
Supposons que le fichier etudiants.csv contienne déjà plusieurs étudiants. Le programme suivant ajoute une nouvelle ligne à la fin du fichier.
1 2 3 4 5 6 7 | import csv with open("etudiants.csv", "a", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["Nadia", 23, "Marrakech", 16]) print("Nouvel étudiant ajouté.") |
Sortie :
1 | Nouvel étudiant ajouté. |
Après cette opération, le fichier contient désormais la nouvelle ligne à la suite des données précédentes.
1 2 3 4 5 6 | nom,age,ville,note Amine,21,Oujda,15.5 Sara,20,Rabat,17 Yassine,22,Fès,13.5 Lina,19,Casablanca,18 Nadia,23,Marrakech,16 |
Sortie :
1 | La ligne de Nadia a été ajoutée sans supprimer les lignes précédentes. |
Il faut toutefois faire attention à ne pas réécrire l'en-tête à chaque ouverture en mode append, sinon plusieurs lignes d'en-tête pourraient apparaître au milieu du fichier.
Nous pouvons ajouter plusieurs nouveaux étudiants avec writerows().
1 2 3 4 5 6 7 8 9 10 11 12 | import csv nouveaux = [ ["Omar", 20, "Agadir", 14], ["Salma", 21, "Tanger", 17.5] ] with open("etudiants.csv", "a", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerows(nouveaux) print("Deux étudiants ajoutés.") |
Sortie :
1 | Deux étudiants ajoutés. |
8. Écrire correctement les chaînes contenant des séparateurs et des guillemets
L'un des avantages de csv.writer() est qu'il gère automatiquement de nombreuses règles du format CSV. Une valeur peut par exemple contenir une virgule alors que la virgule est elle-même utilisée comme séparateur.
Le programme suivant écrit des descriptions contenant des virgules.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import csv articles = [ ["Clavier", "Clavier compact, silencieux"], ["Souris", "Souris légère, sans fil"] ] with open("articles.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nom", "description"]) writer.writerows(articles) print("Articles enregistrés.") |
Sortie :
1 | Articles enregistrés. |
Le module csv ajoute automatiquement les guillemets nécessaires autour des champs contenant le séparateur.
1 2 3 | nom,description Clavier,"Clavier compact, silencieux" Souris,"Souris légère, sans fil" |
Sortie :
1 | Les descriptions contenant des virgules sont automatiquement protégées par des guillemets. |
csv.writer() sait également gérer une chaîne contenant elle-même des guillemets. Ceux-ci sont échappés conformément aux règles du dialecte CSV utilisé.
1 2 3 4 5 6 7 8 9 10 11 12 13 | import csv donnees = [ ["Livre", 'Le guide "Python Facile"'], ["Cours", 'Formation "Python avancé"'] ] with open("descriptions.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["type", "description"]) writer.writerows(donnees) print("Descriptions enregistrées.") |
Sortie :
1 | Descriptions enregistrées. |
Le contenu produit peut alors prendre la forme suivante.
1 2 3 | type,description Livre,"Le guide ""Python Facile""" Cours,"Formation ""Python avancé""" |
Sortie :
1 | Les guillemets présents dans les valeurs sont correctement échappés par le module csv. |
Il est donc préférable d'utiliser csv.writer() plutôt que de construire manuellement les lignes CSV avec des concaténations de chaînes.
9. Écrire des données Python dans un fichier CSV
Les données destinées à un fichier CSV proviennent souvent d'un traitement Python. Elles peuvent être générées par une boucle, calculées par le programme ou extraites d'une autre source avant d'être enregistrées avec csv.writer().
Dans l'exemple suivant, Python génère une table contenant un nombre, son carré et son cube.
1 2 3 4 5 6 7 8 9 10 | import csv with open("puissances.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nombre", "carre", "cube"]) for n in range(1, 6): writer.writerow([n, n ** 2, n ** 3]) print("Table des puissances créée.") |
Sortie :
1 | Table des puissances créée. |
Le fichier obtenu contient les valeurs calculées par la boucle.
1 2 3 4 5 6 | nombre,carre,cube 1,1,1 2,4,8 3,9,27 4,16,64 5,25,125 |
Sortie :
1 | Cinq lignes de données ont été générées et enregistrées dans le fichier CSV. |
Nous pouvons également préparer les lignes avec une compréhension de liste avant de les transmettre à writerows().
1 2 3 4 5 6 7 8 9 10 | import csv lignes = [[n, n ** 2, n ** 3] for n in range(1, 6)] with open("puissances.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(["nombre", "carre", "cube"]) writer.writerows(lignes) print(lignes) |
Sortie :
1 | [[1, 1, 1], [2, 4, 8], [3, 9, 27], [4, 16, 64], [5, 25, 125]] |
Cette approche montre que csv.writer() peut facilement être intégré à un programme Python qui transforme, calcule ou génère des données avant leur exportation.
10. À retenir !
La fonction csv.writer() permet d'écrire des données dans un fichier CSV de manière fiable sans avoir à gérer manuellement les séparateurs et les guillemets. Elle est généralement utilisée avec open(), le mode d'écriture approprié et le paramètre newline="".
- Le module csv appartient à la bibliothèque standard de Python.
- csv.writer(fichier) crée un objet permettant d'écrire des lignes dans un fichier CSV.
- writerow() écrit une seule ligne.
- writerows() écrit plusieurs lignes à partir d'un itérable de séquences.
- Le mode "w" crée ou remplace le contenu du fichier.
- Le mode "a" ajoute des lignes à la fin d'un fichier existant.
- Le paramètre newline="" est recommandé lors de l'ouverture d'un fichier utilisé par le module csv.
- Le paramètre delimiter permet de choisir le séparateur des champs.
- csv.writer() gère automatiquement les guillemets nécessaires lorsque les données contiennent un séparateur ou des guillemets.
- CSV étant un format texte, les types Python comme int et float ne sont pas conservés comme des informations de type dans le fichier.
Le modèle suivant résume la méthode classique permettant de créer un fichier CSV contenant un en-tête et plusieurs lignes de données.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import csv entete = ["nom", "age", "ville", "note"] etudiants = [ ["Amine", 21, "Oujda", 15.5], ["Sara", 20, "Rabat", 17], ["Yassine", 22, "Fès", 13.5], ["Lina", 19, "Casablanca", 18] ] with open("etudiants.csv", "w", encoding="utf-8", newline="") as fichier: writer = csv.writer(fichier) writer.writerow(entete) writer.writerows(etudiants) print("Fichier etudiants.csv créé avec succès.") |
Sortie :
1 | Fichier etudiants.csv créé avec succès. |
Le fichier généré contient alors les données suivantes.
1 2 3 4 5 | nom,age,ville,note Amine,21,Oujda,15.5 Sara,20,Rabat,17 Yassine,22,Fès,13.5 Lina,19,Casablanca,18 |
Sortie :
1 | Une ligne d'en-tête et quatre lignes de données ont été enregistrées. |
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/



