Module csv de Python

Les fichiers CSV (valeurs séparées par des virgules) sont un format de fichier courant utilisé pour stocker des données tabulaires.

Les fichiers CSV sont constitués de texte brut, où chaque ligne représente une ligne de données dans le tableau, et chaque colonne est séparée par des virgules (ou d'autres délimiteurs).

Les fichiers CSV sont couramment utilisés pour l'échange de données car ils sont simples et faciles à traiter.

Python fournit uncsvmodule intégré pour lire et écrire des fichiers CSV. Ce module simplifie le processus de gestion des fichiers CSV, permettant aux développeurs de manipuler facilement des données tabulaires.


1. Lecture de fichiers CSV

Pour lire des fichiers CSV, vous pouvez utiliser l'csv.readerobjet. Voici un exemple simple :

Exemple

import csv

# Ouvrir le fichier CSV
with open('data.csv', mode='r', encoding='utf-8') as file:
    # Créer un objet csv.reader
    csv_reader = csv.reader(file)
   
    # Lire les données ligne par ligne
    for row in csv_reader:
        print(row)

Explication du code :

  • open('data.csv', mode='r', encoding='utf-8'): En mode lecture seule, ouvrez le fichier nommédata.csvet spécifiez l'encodage en UTF-8.
  • csv.reader(file): Créez uncsv.readerobjet pour lire le contenu du fichier.
  • for row in csv_reader: Lit le contenu du fichier ligne par ligne, et chaque ligne de données est convertie en une liste.

2. Écriture de fichiers CSV

Pour écrire dans des fichiers CSV, vous pouvez utiliser l'csv.writerobjet. Voici un exemple :

Exemple

import csv

# Données à écrire
data = [
    ['Nom', 'Âge', 'Ville'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# Ouvrir le fichier CSV
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    # Créer un objet csv.writer
    csv_writer = csv.writer(file)
   
    # Écrire des données
    for row in data:
        csv_writer.writerow(row)

Explication du code :

  • open('output.csv', mode='w', encoding='utf-8', newline=''): En mode écriture, ouvrez le fichier nomméoutput.csvet spécifiez l'encodage en UTF-8.newline=''Utilisé pour éviter les lignes vides dans les systèmes Windows.
  • csv.writer(file): Créez uncsv.writerobjet pour écrire le contenu du fichier.
  • csv_writer.writerow(row): Écrit chaque ligne de données dans le fichier.

3. Lecture et écriture de fichiers CSV à l'aide de dictionnaires

csvLe module fournit également lesDictReaderetDictWriterclasses, qui peuvent analyser chaque ligne d'un fichier CSV pour la convertir en dictionnaire, ou écrire des dictionnaires dans un fichier CSV.

UtilisationDictReaderpour lire des fichiers CSV :

Exemple

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_dict_reader = csv.DictReader(file)
   
    for row in csv_dict_reader:
        print(row)

UtilisationDictWriterpour écrire des fichiers CSV :

Exemple

import csv

data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
   
    # Écrire l'en-tête
    csv_dict_writer.writeheader()
   
    # Écrire des données
    for row in data:
        csv_dict_writer.writerow(row)

Attributs et méthodes courants

Méthodes principales du module csv

MéthodeDescriptionExemple
csv.reader()Lire les données CSV à partir d'un objet fichierreader = csv.reader(file)
csv.writer()Écrire des données dans un fichier CSVwriter = csv.writer(file)
csv.DictReader()Lire les lignes CSV sous forme de dictionnaires (avec en-tête)dict_reader = csv.DictReader(file)
csv.DictWriter()Écrire des dictionnaires dans un fichier CSV (noms de champs requis)dict_writer = csv.DictWriter(file, fieldnames)
csv.register_dialect()Enregistrer un format CSV personnalisé (par ex. délimiteur)csv.register_dialect('mydialect', delimiter='|')
csv.unregister_dialect()Supprimer un dialecte enregistrécsv.unregister_dialect('mydialect')
csv.list_dialects()Lister tous les dialectes enregistrésprint(csv.list_dialects())

Méthodes courantes des objets csv.reader et csv.writer

MéthodeDescriptionObjet applicable
__next__()Lire itérativement la ligne suivante (ou utiliser uneforboucle)reader
writerow(row)Écrire une seule ligne de donnéeswriter
writerows(rows)Écrire plusieurs lignes de données (une liste de listes)writer

Caractéristiques des objets csv.DictReader et csv.DictWriter

Fonctionnalité/MéthodeDescriptionExemple
fieldnamesListe des noms de champs (DictReaderautomatiquement obtenue à partir de la première ligne)dict_reader.fieldnames
writeheader()Écrire la ligne d'en-tête (DictWriterexclusif)dict_writer.writeheader()

Descriptions des paramètres courants

ParamètreDescriptionValeur d'exempleMéthode applicable
delimiterDélimiteur de champ','(par défaut)'\t'reader/writer
quotecharCaractère de citation (encadre les champs spéciaux)'"'(par défaut)reader/writer
quotingRègle de citationcsv.QUOTE_ALL(tout mettre entre guillemets)reader/writer
skipinitialspaceIgnorer les espaces après le délimiteurTrue/Falsereader
lineterminatorTerminateur de ligne'\r\n'(par défaut)writer
dialectNom du dialecte prédéfini'excel'(par défaut)Toutes les méthodes

Exemple

1. Lecture de fichiers CSV

Exemple

import csv

with open('data.csv', 'r') as fichier:
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        print(row)  # Chaque ligne est une liste

2. Écriture de fichiers CSV

Exemple

data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # Écrire plusieurs lignes

3. Utilisation de DictReader et DictWriter (avec en-tête)

Exemple

# Lire
with open('data.csv', 'r') as fichier:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
        print(row['Name'], row['Age'])  # Accès via les noms de champs

# Écrire
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
    dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    dict_writer.writeheader()  # Écrire l'en-tête
    dict_writer.writerow({'Name': 'Alice', 'Age': 25})

4. Dialectes personnalisés (p. ex., gestion des fichiers TSV)

Exemple

csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('data.tsv', 'r') as fichier:
    reader = csv.reader(file, dialect='tsv')
    for row in reader:
        print(row)
Autres extensions