Comment créer un fichier CSV en python ?

Article publié le mardi 3 janvier 2023 et mis à jour le mercredi 3 avril 2024.

Comment créer un fichier CSV en python ?

Comment créer et écrire dans un fichier CSV en Python ? Découvrez tout sur la manipulation de fichiers CSV à partir de liste(s) et dictionnaires !

Pour écrire dans un fichier CSV en Python, on utilise le module csv de Python.

Par exemple, pour écrire une liste de chaînes de caractères dans un nouveau fichier CSV :

import csv

data = ["un", "deux", "trois", "quatre"]

with open('nombres.csv', 'w') as f:
  writer = csv.writer(f)
  writer.writerow(data)

L’éxécution de ces lignes créera un fichier appelé nombres.csv dans le dossier courant.

Vous savez maintenant comment rapidement sauver du contenu dans un fichier csv en python.

Cet exemple simpliste ne correspond pas à votre cas ? Vous voulez en apprendre plus sur l’écriture de contenu dans des fichiers CSV ?

Il y a plein d’autres choses à découvrir sur les fichiers CSV en comment les utiliser avec Python.

Ecriture vers CSV en Python en détail

Le format CSV ou Comma-Separated Values est un fichier texte constitué de données séparées par des virgules (ou points-virgules parfois).

Les fichiers CSV sont utilisés pour échanger des données simples qu’on peut représenter sous forme de tableau.

On peut par exemple récupérer des données d’une base de données sous forme de CSV. On peut ensuite manipuler ce dump de base de donnée en y ajoutant une nouvelle entrée en utilisant le format CSV.

Voici un exemple de ce à quoi ressemblent les données CSV :

Fichier CSV Python dans le terminal

Si on met ça dans un GUI (Graphical User Interface), on peut obtenir quelque chose de plus joli, similaire au résultat d’un tableur comme Excel ou Google Sheets :

Fichier CSV Python dans un lecteur CSV

On a déjà vu ensemble comment rapidement écrire le contenu d’une liste dans l’introduction. Voyons maintenant comment écrire dans des fichiers CSV en Python de manière plus approfondie.

Les 4 étapes de l’écriture d’un CSV en Python

Pour écrire dans un fichier CSV en Python :

1. Ouvrir un fichier en mode écriture en Python

En Python on utilise la fonction open() pour écrire dans des fichiers. Pour le moment, on n’utilise rien de spécifique aux fichiers CSV, on ouvre juste un fichier.

La fonction open() prend le chemin du fichier comme premier argument et on spécifie le mode d’ouverture comme second argument.

Voici un tableau complet des modes d’ouvertures :

Mode Description
r Lecture simple (valeur implicite par défaut)
w Écriture. Crée un fichier ou remplace son contenu
x Création stricte. L’opération échoue si le fichier existe
a Ajouter sans remplacer. Crée un fichier s’il n’existe pas
t Mode texte (valeur implicite par défaut)
b Mode binaire.
+ Mise à jour (lecture et écriture)

Revenons à l’ouverture de notre fichier CSV avec open, on va écire quelque chose comme ça :

objetFichier = open('test.csv', 'w')

2. Créez un objet CSV writer

Pour ce faire, créez l’objet writer() du module csv, et passez le fichier ouvert comme argument.

writer = csv.writer(objetFichier)

3. Ecrire des données dans un fichier CSV

Utilisez la fonction writerow() de l’objet writer pour écrire des données dans le fichier CSV.

data = ["un", "deux", "trois", "quatre"]
writer.writerow(data)

4. Fermez un fichier ouvert avec open en Python

Pour fermer correctement un fichier en Python, on utilise utilise la méthode close() sur l’objet du fichier qu’on a ouvert avec open.

objetFichier.close()

Voici un exemple qui illustre ce processus :

import csv

# 1. Ouvrir un fichier en mode écriture en Python
f = open('nombres.csv', 'w')

# 2. Créez un objet CSV writer
writer = csv.writer(f)

# 3. Ecrire des données dans un fichier CSV
data = ["un", "deux", "trois", "quatre"]
writer.writerow(data)

# 4. Fermez un fichier ouvert avec open en Python
f.close()

On se retrouve avec un fichier appelé nombres.csv dans le dossier courant depuis lequel on a lancé notre script en exécutant ces lignes.

C’est comme ça qu’on écrit dans un fichier en Python de manière théorique, étape par étape. Je dis de manière théorique car depuis le PEP 343 et Python 2.5 on utilise plus souvent l’instruction simple with.

Écrire dans un fichier en Python avec l’instruction with

On utilise l’instruction with pour ouvrir un fichier en Python. Cette manière d’ouvrir un fichier permet de raccourcir le code et de ne pas oublier de fermer le fichier (avec close()) comme l’instruction with s’en charge automatiquement.

Ainsi, les quelques lignes de code qu’on a vues plus haut deviennent :

import csv

with open('nombres.csv', 'w') as f:
  writer = csv.writer(f)
  data = ["un", "deux", "trois", "quatre"]
  writer.writerow(data)

On a donc créé un nouveau fichier appelé nombres.csv (car w ouvre et tronque le contenu du fichier s’il existe déjà) dans le dossier courant et y écrit la liste de strings un deux trois quatre.

Comment écrire des caractères non-ASCII dans un CSV en Python ?

Par défaut, vous ne pouvez pas écrire de caractères non ASCII dans un fichier CSV.

Pour pouvoir écriture des caractères non ASCII dans un fichier CSV, on spécifie l’encodage des caractères en troisième argument de la fonction open().

with open('nombres.csv', 'w', encoding="utf-8")

Pour le reste, c’est pareil que ce qu’on a vu plus haut dans cet article.

Comment créer un en-tête pour le fichier CSV

Alors on sait maintenant mettre le contenu d’une liste sur une ligne ou plusieurs lignes d’un fichier CSV.

C’est bien mignon mais comment créer des en-têtes ou pieds de pages ?

Pour les headers (ou en-têtes), utilise simplement la première lignes pour mettre le titre des colomnes.

Reprenons notre ancien code et ajoutant des headers.

import csv

with open('nombres.csv', 'w') as f:
  writer = csv.writer(f)
  # nos headers/en-têtes
  headers = ["colonne_1", "colonne_2", "colonne_3", "colonne_4"]
  writer.writerow(headers)
  # on ajoute ensuite le contenu du fichier csv
  data = ["un", "deux", "trois", "quatre"]
  writer.writerow(data)

On ajoute simplement une ligne avec la méthode writerow() comme d’habitude, sauf qu’on met les en-têtes en premier, avant tout le reste.

Comment écrire plusieurs lignes dans un fichier CSV en Python ?

Comme on vient de le voir, on peut utiliser plusieurs fois la méthode writerow() dans un même fichier CSV pour écrire plusieurs lignes.

Mais comment faire pour écrire plusieurs lignes en même temps et d’un seul coup ?

En Python, on utilise la fonction writerows() (avec un s) du module CSV pour écrire plusieurs lignes dans un fichier CSV en une seule fois.

Pour écrire plusieurs lignes de données dans un CSV d’un seul coup, utilisez la méthode writerows().

Voici un exemple :

import csv

nombres = [
    ['un', 'deux', 'trois', 'quatre'],
    ['cinq', 'six', 'sept', 'huit'],
    ['neuf', 'dix', 'onze', 'douze'],
]

with open('nombres.csv', 'w') as f:
    writer = csv.writer(f)
    # On utilise writerows() et pas writerow()
    writer.writerows(nombres)

On se retrouve donc avec un fichier CSV comme ceci :

Comment écrire plusieurs lignes dans un fichier CSV en Python ?

Comment écrire un dictionnaire dans un fichier CSV en Python ?

Pour écrire un dictionnaire dans un fichier CSV en Python, utilisez l’objet DictWriter en suivant ces trois étapes :

  1. On crée un object writer avec DictWriter du module CSV et on spécifie les noms des champs (le fichier et l’en-tête)
  2. Utilisez la méthode writeheader() pour écrire l’en-tête dans le fichier CSV
  3. Utilisez la méthode writeows() pour écrire le reste des valeurs du dictionnaire dans le fichier

Par exemple, on a un dictionnaire comme ça :

data = [
    {'colonne_1': 'un', 'colonne_2': 'deux', 'colonne_3': 'trois', 'colonne_4': 'quatre'},
    {'colonne_1': 'cinq', 'colonne_2': 'six', 'colonne_3': 'sept', 'colonne_4': 'huit'},
    {'colonne_1': 'neuf', 'colonne_2': 'dix', 'colonne_3': 'onze', 'colonne_4': 'douze'},
]
import csv

entetes = ['colonne_1', 'colonne_2', 'colonne_3', 'colonne_4']

data = [
    {'colonne_1': 'un', 'colonne_2': 'deux', 'colonne_3': 'trois', 'colonne_4': 'quatre'},
    {'colonne_1': 'cinq', 'colonne_2': 'six', 'colonne_3': 'sept', 'colonne_4': 'huit'},
    {'colonne_1': 'neuf', 'colonne_2': 'dix', 'colonne_3': 'onze', 'colonne_4': 'douze'},
]

with open('nombres.csv', 'w') as f:
    writer = csv.DictWriter(f, fieldnames=entetes)
    writer.writeheader()
    writer.writerows(data)

Au final, la première ligne de headers n’est pas spéciale. L’attribut fieldnames de DictWriter permet juste à Python de savoir quelles clés du dictionnaire utiliser. Bref, ces quelques lignes donnent un fichier CSV comme ça :

Comment écrire un dictionnaire dans un fichier CSV en Python ?

Comment allez-vous utiliser Python pour créer vos fichier CSV ?

Vous savez maintenant comment écrire dans un CSV en Python. En résumé on utilise le module csv en suivant ces étapes :

  1. On ouvre un fichier CSV en mode écriture.
  2. On crée un objet CSV writer.
  3. On écrit nos données dans le fichier CSV
  4. On ferme le fichier CSV (fait automatiquement avec l’expression with)

Concrètement, ça donne quelque chose comme ça :

import csv

data = ["un", "deux", "trois", "quatre"]

with open('nombres.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerow(data)

Python est un langage passionnant, j’en parle souvent sur ce blog, voici quelques articles qui vous intéresseront sûrement :

Comment Coder

Je m'appelle Thomas. J'ai commencé à coder dans mon enfance. Depuis ma sortie de la première promo de l'École 42, j'ai développé des centaines d'applications et sites web. Sur ce blog, je vous donne les meilleurs conseils et astuces pour apprendre comment apprendre à coder efficacement.