Écrire dans un fichier CSV avec csv.writer() en Python

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.

Sortie :

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.

Sortie :

À 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.

Sortie :

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.

Sortie :

Le contenu du fichier etudiants.csv devient alors :

Sortie :

Nous pouvons appeler plusieurs fois writerow() pour écrire successivement plusieurs enregistrements.

Sortie :

Le fichier obtenu contient alors l'en-tête suivi de deux étudiants.

Sortie :

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.

Sortie :

Nous pouvons maintenant utiliser writerow() pour l'en-tête puis writerows() pour écrire toutes les lignes de données.

Sortie :

Le fichier généré contient maintenant toutes les lignes.

Sortie :

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.

Sortie :

Nous pouvons ensuite relire le fichier avec csv.reader() afin de vérifier les données réellement enregistrées.

Sortie :

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.

Sortie :

Le contenu du fichier produits.csv utilise maintenant des points-virgules entre les différentes colonnes.

Sortie :

Lors de la lecture de ce fichier, il faudra naturellement utiliser le même séparateur.

Sortie :

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.

Sortie :

Après cette opération, le fichier contient désormais la nouvelle ligne à la suite des données précédentes.

Sortie :

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().

Sortie :

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.

Sortie :

Le module csv ajoute automatiquement les guillemets nécessaires autour des champs contenant le séparateur.

Sortie :

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é.

Sortie :

Le contenu produit peut alors prendre la forme suivante.

Sortie :

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.

Sortie :

Le fichier obtenu contient les valeurs calculées par la boucle.

Sortie :

Nous pouvons également préparer les lignes avec une compréhension de liste avant de les transmettre à writerows().

Sortie :

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.

Sortie :

Le fichier généré contient alors les données suivantes.

Sortie :

 




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/


Leave a Reply

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