Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
CSV
Un tableau en texte brut. Lu par tous les tableurs, toutes les bases de données et tous les outils d’analyse. Attention : un Excel français sépare au point-virgule.
CSV
CSV est un format texte que n’importe quel éditeur ouvre. Il est utilisé pour l’échange entre programmes.
L’extension est .csv et le nom complet Comma-Separated Values. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.
Il remonte à 1972. La spécification est RFC 4180.
À un format resté lisible aussi longtemps, on peut confier quelque chose qu’on veut retrouver dans dix ans.
Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.
CSV enregistre son contenu à l’identique. Le réenregistrer ne change rien : vous pouvez l’ouvrir, le modifier et le réenregistrer autant de fois que vous voulez sans accumuler de dégâts, et c’est ce qui en fait un format de travail plutôt qu’un format de livraison.
CSV n’a pas de syntaxe de commentaires. Tout ce qui explique doit vivre hors du fichier, ce qui est bon à savoir avant de le choisir pour quelque chose qu’un humain modifiera à la main.
Microsoft Excel, LibreOffice Calc et pandas le lisent, comme la plupart des programmes du même genre.
Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.
Aucun navigateur ne le lit.
C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.
CSV est fait pour être ouvert et modifié. Gardez le fichier dans ce format tant que le travail dure, et exportez depuis lui chaque fois qu’une version finie est nécessaire.
Les reproches qui reviennent : les types de colonnes sont devinés à l’import au lieu d’être déclarés.
Rien de tout cela n’est une raison d’éviter le format. Ce sont les choses à connaître avant que l’une d’elles vous surprenne, ce qui est une affirmation différente et plus utile.
Un CSV est des lignes de valeurs séparées par des virgules, et cette description tient jusqu’à la première valeur qui contient une virgule. Il faut alors la mettre entre guillemets, et les valeurs entre guillemets ont besoin d’un moyen de contenir un guillemet, et les valeurs ont besoin d’un moyen de contenir un saut de ligne — et chacune de ces règles est l’endroit où les implémentations commencent à diverger.
La RFC 4180 a été publiée en 2005 pour mettre les conventions par écrit, et elle précise qu’elle documente une pratique existante plutôt qu’elle ne définit une norme que tout le monde doit suivre. Vingt ans plus tard, beaucoup de logiciels ne la suivent toujours pas. C’est le point de départ honnête : CSV est une famille de formats presque compatibles qui partagent une extension.
Une valeur contenant une virgule, un guillemet ou un saut de ligne doit être entourée de guillemets doubles, et un guillemet à l’intérieur d’une telle valeur est écrit deux fois. À cette condition, une valeur peut contenir n’importe quoi, y compris tout un paragraphe avec des sauts de ligne dedans.
À défaut, le dommage est silencieux. Un guillemet non échappé fait qu’un parseur avale le reste du fichier dans un seul champ. Une virgule à l’intérieur d’une adresse non entourée décale d’une colonne tout ce qui suit, pour cette seule ligne — de sorte qu’un fichier de dix mille lignes peut être correct sauf pour les onze qui mentionnent une entreprise avec une virgule dans son nom, et rien ne signale d’erreur.
Dans les pays où le séparateur décimal est la virgule — la majeure partie de l’Europe continentale — les tableurs exportent avec des points-virgules, parce qu’un fichier plein de « 1,50 » serait sinon inanalysable. L’extension reste .csv, ce qui est la source d’une bonne partie de la confusion.
La tabulation est le troisième choix courant et la raison pour laquelle TSV existe, puisqu’une tabulation n’apparaît presque jamais à l’intérieur d’une valeur. Si un CSV s’ouvre en une seule colonne, le séparateur est la première chose à vérifier : le fichier va bien et le lecteur a devancé de travers. La plupart des boîtes d’import vous laissent dire quel caractère sépare les valeurs, et la plupart des boîtes d’export vous laissent choisir.
Un CSV n’a pas de types. Les caractères 0 0 1 2 3 sont dans le fichier, et qu’ils deviennent le nombre 123 ou le texte « 00123 » est entièrement décidé par ce qui les lit.
C’est la racine de toute la famille de plaintes sur les tableurs qui mangent des données : zéros initiaux qui disparaissent des codes postaux français, codes produit qui deviennent des dates (« 12/05 » lu comme le 12 mai), longs identifiants qui perdent leurs derniers chiffres au profit de la virgule flottante. Rien de tout cela n’est dans le fichier. Cela se passe à l’ouverture, et la défense consiste à importer plutôt qu’ouvrir et à déclarer les colonnes gênantes comme texte.
Un CSV ne porte pas de déclaration de son encodage de caractères. UTF-8 est le défaut sain de ce qui s’écrit aujourd’hui ; Excel sous Windows a historiquement supposé une page de code régionale (Windows-1252 en Europe de l’Ouest), ce qui explique pourquoi un export plein de caractères accentués s’ouvre en charabia dès qu’il sort de l’environnement qui l’a produit.
Le contournement habituel consiste à écrire une marque d’ordre d’octet — trois octets invisibles qui disent à Excel que le fichier est en UTF-8. Cela marche, et cela crée un autre problème : beaucoup de parseurs voient alors ces octets comme partie de l’en-tête de la première colonne, de sorte qu’une correspondance contre « id » échoue en silence. Il n’y a pas d’arrangement qui satisfasse les deux, ce qui est un bon résumé du format dans son ensemble.
Le streaming. Un fichier plus gros que la mémoire peut être lu ligne par ligne par un outil qui ne tient jamais plus d’une ligne à la fois, ce qui est pourquoi les pipelines de données, les imports en base et les utilitaires en ligne de commande le parlent tous et pourquoi un export de cinq gigaoctets est gérable.
Et la transparence. C’est du texte, donc rien ne peut s’y cacher — pas de macros, pas de liens externes, pas de formules qui vont chercher d’autres fichiers. C’est précisément pourquoi les systèmes soucieux de sécurité demandent du CSV plutôt qu’un classeur, et c’est une propriété réelle plutôt qu’une consolation.
Cinq habitudes préviennent à peu près tous les problèmes. Utilisez UTF-8 sans marque d’ordre d’octet. Mettez entre guillemets chaque champ qui pourrait contenir le séparateur, un guillemet ou un saut de ligne — ou bien mettez tout entre guillemets, ce qui est légal et peu coûteux. Utilisez une ligne d’en-têtes avec des noms courts et sans ambiguïté. Écrivez les dates en ISO, année d’abord, qui se trie correctement et ne peut pas être mal lu à l’américaine ou à l’européenne. Et dites quel séparateur vous avez utilisé si ce n’est pas une virgule.
Rien de tout cela n’est imposé par quoi que ce soit, ce qui est pourquoi cela vaut la peine d’être fait délibérément. Un CSV qui suit ces cinq règles s’ouvre correctement dans tout outil qui le recevra jamais.
RFC 4180 spécifie un saut de ligne CRLF, comme l’héritage DOS du format. La plupart des parseurs acceptent aussi LF (Unix) et même CR seul (Mac classique), ce qui évite les problèmes en pratique. C’est le genre de tolérance qui rend le format facile à manipuler en ligne de commande, où `cat`, `awk` et `cut` traitent les lignes sans se soucier de leur terminaison.
C’est aussi la source d’une confusion particulière avec les fichiers qui traversent les systèmes. Un CSV généré sous Windows, ouvert sous macOS ou Linux, présente souvent des sauts de ligne que certains outils anciens comptent comme un caractère de trop. Pour des fichiers partagés entre plateformes, la convention la plus sûre est de rester en CRLF, ou de convertir au vol avec un outil qui sait lire les trois conventions.
| Extension | .csv |
|---|---|
| Type de média | text/csv |
| Première publication | 1972 |
| Spécification | RFC 4180 |