Table of Contents
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
csvde 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
In-Article Ad
Dev Mode
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
Optimisation Python : Comprendre Big O, Theta et Omega avec Exemples
Maitrisez la complexite algorithmique en Python. Big O, Theta, Omega expliques avec des exemples concrets et le profiling avec cProfile.
Persistance d'objets Python avec Shelve : Guide complet
Decouvrez comment stocker et recuperer facilement vos objets Python avec la bibliotheque Shelve. Apprenez les bonnes pratiques, evitez les pieges courants et maitrisez la persistance de donnees.
Manipulation de Liste en Python : Operations et Methodes Pratiques pour Maitriser les Collections
Apprenez les methodes cles de manipulation de listes en Python : extension, concatenation, recherche d'index, tri et inversion. Guide complet avec exemples pratiques et bonnes pratiques.