Ecrire des fichiers CSV et TSV avec Python : tutoriel complet avec pandas

Apprenez a creer, lire et ecrire des fichiers CSV et TSV en Python avec pandas et le module csv. Guide complet avec exemples pratiques, bonnes pratiques et pieges a eviter.

Mahmoud DEVO
Mahmoud DEVO
December 27, 2025 7 min read
Ecrire des fichiers CSV et TSV avec Python : tutoriel complet avec pandas

Introduction

Les fichiers CSV (Comma-Separated Values) et TSV (Tab-Separated Values) sont parmi les formats de donnees les plus utilises dans le monde de la programmation et de la data science. Que vous travailliez sur l’analyse de donnees, l’import/export de bases de donnees, ou la communication entre systemes, maitriser la manipulation de ces fichiers est une competence essentielle pour tout developpeur Python.

Dans ce tutoriel complet, nous allons explorer en profondeur les differentes methodes pour creer, lire et ecrire des fichiers CSV et TSV avec Python. Nous utiliserons principalement deux approches :

  • Le module natif csv de Python, ideal pour des operations simples et legeres
  • La bibliotheque pandas, parfaite pour des manipulations de donnees plus complexes

A la fin de ce guide, vous serez capable de manipuler efficacement ces formats de fichiers dans vos projets Python.

Prerequis

Avant de commencer, assurez-vous d’avoir pandas installe :

pip install pandas

Ecrire un fichier CSV a partir d’un dictionnaire avec pandas

L’une des facons les plus elegantes de creer un fichier CSV est d’utiliser pandas avec un dictionnaire Python. Cette methode est particulierement utile lorsque vous avez des donnees structurees.

import pandas as pd

# Creer un dictionnaire avec vos donnees
d = {'a': (1, 101), 'b': (2, 202), 'c': (3, 303)}

# Convertir le dictionnaire en DataFrame
df = pd.DataFrame.from_dict(d, orient="index")

# Ecrire le DataFrame dans un fichier CSV
df.to_csv("data.csv")

Vous pouvez egalement personnaliser l’export avec des parametres supplementaires :

# Export avec options avancees
df.to_csv(
    "data.csv",
    index=True,           # Inclure l'index
    header=True,          # Inclure les en-tetes
    encoding='utf-8',     # Encodage du fichier
    sep=',',              # Separateur (virgule par defaut)
    na_rep='N/A'          # Representation des valeurs manquantes
)

Lire un fichier CSV et le convertir en dictionnaire

La lecture de fichiers CSV avec pandas est tout aussi simple. Voici comment charger un fichier et le convertir en dictionnaire :

import pandas as pd

# Lire le fichier CSV
df = pd.read_csv("data.csv")

# Convertir en dictionnaire
d = df.to_dict()

# Afficher le resultat
print(d)

Pour plus de controle sur la lecture, utilisez les parametres avances :

df = pd.read_csv(
    "data.csv",
    sep=',',              # Separateur
    encoding='utf-8',     # Encodage
    index_col=0,          # Colonne a utiliser comme index
    na_values=['N/A'],    # Valeurs a considerer comme NaN
    dtype={'colonne': str} # Types de donnees specifiques
)

Ecrire un fichier TSV

Les fichiers TSV utilisent la tabulation comme separateur au lieu de la virgule. Voici comment en creer un avec le module csv :

import csv

with open('/tmp/output.tsv', 'w', newline='', encoding='utf-8') as out_file:
    tsv_writer = csv.writer(out_file, delimiter='\t')
    tsv_writer.writerow(['name', 'field'])
    tsv_writer.writerow(['Dijkstra', 'Computer Science'])
    tsv_writer.writerow(['Shelah', 'Math'])
    tsv_writer.writerow(['Aumann', 'Economic Sciences'])

Avec pandas, c’est encore plus simple :

import pandas as pd

data = {
    'name': ['Dijkstra', 'Shelah', 'Aumann'],
    'field': ['Computer Science', 'Math', 'Economic Sciences']
}
df = pd.DataFrame(data)
df.to_csv('/tmp/output.tsv', sep='\t', index=False)

Ecrire un fichier CSV avec le module csv

Le module natif csv offre un controle fin sur l’ecriture des fichiers :

import csv

def csv_writer(data, path):
    """Ecrit des donnees dans un fichier CSV."""
    with open(path, 'w', newline='', encoding='utf-8') as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in data:
            writer.writerow(line)

# Preparer les donnees
data = [
    ["first_name", "last_name", "age"],
    ["John", "Doe", "22"],
    ["Jane", "Doe", "31"],
    ["Jack", "Reacher", "27"]
]

# Ecrire le fichier
csv_writer(data, "output.csv")

Ajouter des donnees a un fichier CSV existant

Pour ajouter des lignes a un fichier CSV existant sans ecraser son contenu :

import csv

def append_to_csv(file_path, row_data):
    """Ajoute une ligne a un fichier CSV existant."""
    with open(file_path, 'a', newline='', encoding='utf-8') as csv_file:
        writer = csv.writer(csv_file)
        writer.writerow(row_data)

# Exemple d'utilisation
append_to_csv("output.csv", ["Alice", "Smith", "28"])

Avec pandas, vous pouvez egalement faire cela :

import pandas as pd

# Lire le fichier existant
df_existant = pd.read_csv("output.csv")

# Creer les nouvelles donnees
nouvelles_donnees = pd.DataFrame({
    'first_name': ['Alice'],
    'last_name': ['Smith'],
    'age': [28]
})

# Concatener et sauvegarder
df_final = pd.concat([df_existant, nouvelles_donnees], ignore_index=True)
df_final.to_csv("output.csv", index=False)

Ecrire des fichiers CSV dynamiquement

Generer des fichiers CSV de maniere dynamique est utile pour les scripts d’automatisation :

import csv

# Generer des donnees dynamiquement
data = [[i, i * 2, i ** 2] for i in range(1, 11)]

# Ajouter les en-tetes
headers = ['number', 'double', 'square']

with open('dynamic_output.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(headers)
    writer.writerows(data)  # Ecrire toutes les lignes d'un coup

Bonnes Pratiques

Voici les bonnes pratiques a suivre lors de la manipulation de fichiers CSV/TSV :

1. Toujours specifier l’encodage

# Bon
with open('file.csv', 'w', encoding='utf-8') as f:
    ...

# A eviter - peut causer des problemes d'encodage
with open('file.csv', 'w') as f:
    ...

2. Utiliser newline=” pour eviter les lignes vides

# Correct - evite les lignes vides supplementaires sous Windows
with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    ...

3. Gerer les exceptions

import csv
import os

def safe_csv_write(path, data):
    """Ecriture CSV securisee avec gestion des erreurs."""
    try:
        with open(path, 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f)
            writer.writerows(data)
        return True
    except PermissionError:
        print(f"Erreur: Permission refusee pour {path}")
        return False
    except IOError as e:
        print(f"Erreur d'ecriture: {e}")
        return False

4. Valider les donnees avant l’ecriture

def validate_and_write(data, path, expected_columns):
    """Valide les donnees avant ecriture."""
    for i, row in enumerate(data):
        if len(row) != expected_columns:
            raise ValueError(f"Ligne {i}: attendu {expected_columns} colonnes, obtenu {len(row)}")

    with open(path, 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerows(data)

Pieges Courants

1. Mode ‘wb’ vs ‘w’ en Python 3

# ERREUR - mode binaire ne fonctionne pas avec csv en Python 3
with open('file.csv', 'wb') as f:
    writer = csv.writer(f)  # TypeError!

# CORRECT - utiliser le mode texte
with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f)

2. Oublier de fermer les fichiers

# A EVITER - le fichier peut rester ouvert en cas d'erreur
f = open('file.csv', 'w')
writer = csv.writer(f)
writer.writerow(['data'])
f.close()

# RECOMMANDE - utiliser le context manager
with open('file.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['data'])

3. Problemes avec les caracteres speciaux

# Les virgules dans les donnees peuvent corrompre le CSV
data = ['Nom, Prenom', 'Valeur']  # La virgule dans 'Nom, Prenom' pose probleme

# Solution: csv.writer gere automatiquement les guillemets
with open('file.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_ALL)
    writer.writerow(data)

4. Index non desire avec pandas

# Cree une colonne 'Unnamed: 0' a la relecture
df.to_csv('file.csv')
df = pd.read_csv('file.csv')  # Contient 'Unnamed: 0'

# Solution: desactiver l'index a l'ecriture
df.to_csv('file.csv', index=False)

Conclusion

La manipulation de fichiers CSV et TSV en Python est une competence fondamentale que tout developpeur devrait maitriser. Dans ce tutoriel, nous avons explore :

  • Le module csv : ideal pour des operations simples et un controle fin
  • La bibliotheque pandas : parfaite pour des manipulations de donnees complexes
  • Les bonnes pratiques : encodage, gestion des erreurs, validation des donnees
  • Les pieges courants : mode binaire, caracteres speciaux, gestion des index

Que vous choisissiez le module natif csv ou pandas depend de votre cas d’utilisation. Pour des fichiers simples et des performances optimales, le module csv suffit. Pour des analyses de donnees plus poussees et des transformations complexes, pandas est incontournable.

Prochaines etapes

Pour approfondir vos connaissances, explorez :

  • JSON et XML : d’autres formats de donnees populaires en Python
  • Excel avec openpyxl : pour les fichiers .xlsx
  • Bases de donnees : SQLite, PostgreSQL avec SQLAlchemy
  • Traitement de gros fichiers : lecture par chunks avec pandas
  • Validation de donnees : bibliotheques comme pydantic ou cerberus
Advertisement

In-Article Ad

Dev Mode

Share this article

Mahmoud DEVO

Mahmoud DEVO

Senior Full-Stack Developer

I'm a passionate full-stack developer with 10+ years of experience building scalable web applications. I write about Vue.js, Node.js, PostgreSQL, and modern DevOps practices.

Enjoyed this article?

Subscribe to get more tech content delivered to your inbox.

Related Articles