- Des formats « supérieurs » censés remplacer le CSV sont souvent présentés, mais la plupart reposent sur des comparaisons biaisées qui passent à côté des véritables atouts du CSV
- Le but de cet article n’est pas de dire que le CSV est parfait, mais de mettre en lumière ses avantages sous-estimés
- À contre-courant de l’air du temps qui consiste à détester le CSV pour paraître plus malin, il rappelle sa vraie valeur
1. Le CSV est extrêmement simple
- La définition du CSV est littéralement dans son nom : des « valeurs séparées par des virgules »
- Les lignes sont séparées par des sauts de ligne, les colonnes par des virgules
- Si une valeur contient une virgule ou un saut de ligne, elle est entourée de guillemets, et les guillemets eux-mêmes sont représentés par des doubles guillemets
- Pas besoin de spécification complexe : n’importe qui peut le comprendre et l’utiliser intuitivement
- Cela dit, pour un parsing correct, il reste préférable d’utiliser un parseur CSV dédié
2. Le CSV est une idée collective
- Il n’a pas de propriétaire, il n’est pas privatisé
- La RFC 4180 existe, mais la plupart la considèrent surtout comme une référence
- C’est un format libre fondé sur des règles communes partagées implicitement par les développeurs du monde entier
3. Le CSV est du texte
- Comme JSON, YAML ou XML, c’est un format texte brut lisible par les humains
- Il peut être ouvert avec n’importe quel éditeur de texte, et son contenu peut être consulté sans outil particulier
- Le choix de l’encodage est lui aussi libre
4. Le CSV est optimisé pour le streaming
- Comme il se lit ligne par ligne, sa consommation mémoire est très faible
- Avec un code simple, on peut traiter plusieurs gigaoctets de données avec seulement quelques Ko de mémoire
- Les formats orientés colonnes comme Parquet se prêtent mal au streaming et nécessitent un buffering complexe
- Son inconvénient est qu’il faut lire toute la ligne, même si l’on ne veut consulter qu’une colonne précise
5. Le CSV se prête facilement à l’ajout en fin de fichier
- Il est très simple d’ouvrir un fichier en mode append(
a+) pour ajouter de nouvelles lignes à la fin
- À l’inverse, les formats orientés colonnes comme Parquet rendent l’ajout de lignes inefficace et complexe
6. Le CSV prend en charge le typage dynamique
- Comme il n’impose pas de types fixes, les données peuvent être interprétées avec souplesse
- Exemple : JavaScript ne sait pas représenter correctement les entiers 64 bits, alors que le CSV permet de les utiliser sans cette contrainte
- Cela apporte des avantages en matière de compatibilité entre langages et de flexibilité
- Mais une mauvaise interprétation peut provoquer des erreurs → prudence à l’usage
- Lorsqu’un haut niveau de performance est requis, il est aussi possible de traiter directement les données au niveau binaire sans décoder le texte
7. Le CSV est concis
- Comme l’en-tête n’apparaît qu’au début du fichier, il y a très peu de répétition structurelle
- JSON et XML ont un surcoût important à cause de la répétition des clés
- La représentation des chaînes est déjà concise, et le surcoût propre au format (virgules, guillemets, etc.) reste très faible
8. Un CSV renversé reste un CSV valide
- Même renversé octet par octet, un CSV reste un CSV valide
- Cela est rendu possible par le mécanisme d’échappement des doubles guillemets, qui est une forme d’échappement palindromique
- Cette propriété permet de lire très efficacement la fin d’un fichier CSV
- Exemple : pour reprendre un processus interrompu, on peut relire uniquement les dernières lignes du fichier pour redémarrer
9. Excel déteste le CSV
- Si Excel trouve ce format peu pratique, c’est peut-être au contraire le signe que vous êtes sur la bonne voie
3 commentaires
Le plus simple, c’est le mieux !
Le pire est mieux !
Avis Hacker News
J’aime les fichiers CSV et INI parce qu’ils sont simples, basés sur du texte, sans types encodés dans le format, et constitués uniquement de chaînes de caractères
Le CSV est élégant, mais il a un défaut fatal : les guillemets ont un effet « non local »
Le meilleur aspect du CSV, c’est que n’importe qui peut écrire un parseur en 30 minutes
Quelqu’un qui aime le CSV n’a probablement jamais reçu la demande de gérer la prévention de l’injection CSV dans un environnement d’entreprise
J’aime le CSV pour plusieurs raisons
Je développe actuellement une solution basée sur Raspberry Pi
Le côté peu amusant du CSV, c’est que les parseurs et sérialiseurs écrits à la va-vite répètent les erreurs classiques de mauvaise gestion des guillemets
csvSi c’était vraiment une lettre d’amour, elle aurait été écrite au format CSV
Les arguments contre JSON ne sont pas très convaincants
En tant qu’amateur de formats modernes, dans le doute j’utilise CSV ou JSONL
grepet les traiter en streaming