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é
TSV
Comme le CSV mais séparé par des tabulations, ce qui fait que le problème de la virgule dans un champ ne se pose même pas.
TSV
TSV est un format texte que n’importe quel éditeur ouvre. Il est utilisé pour l’échange entre programmes.
L’extension est .tsv et le nom complet Tab-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 à 1993. La spécification est IANA text/tab-separated-values.
À 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.
TSV 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.
TSV 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.
TSV 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.
La virgule apparaît en permanence dans les données réelles — dans les adresses, les noms de société, les descriptions de produit, dans tout texte libre. CSV gère cela avec des règles de guillemetage, et ces règles sont l’endroit où le format se trompe : un champ contenant un guillemet à l’intérieur d’un champ entre guillemets contenant une virgule est légal, déplaisant, et implémenté de manière incohérente par la moitié des outils qui prétendent lire du CSV.
Le caractère de tabulation n’apparaît presque jamais dans un champ, parce que personne n’en tape dans un formulaire ou dans une base de données. TSV peut donc généralement se passer de guillemetage : découpez chaque ligne sur la tabulation et vous avez les champs, correctement, sans machine d’état ni cas limites. C’est tout l’argument, et sur des données réelles en désordre il est fort.
La bio-informatique, où les fichiers d’annotation génomique, les matrices d’expression et les tables de variants sont séparés par tabulation de manière courante. Le travail de données en ligne de commande, parce que les outils Unix standards découpent sur les espaces et un fichier séparé par tabulation y est un citoyen de première classe d’une façon dont un CSV guillemeté ne l’est pas.
Également les grands jeux de données publiques et les exports de bases, où les données contiennent des virgules et du texte et où l’exporteur préfère ne pas penser au guillemetage. Si on vous a remis un .tsv ou un .tab, il vient de l’un de ces mondes.
La vertu de la tabulation est aussi son défaut : vous ne pouvez pas la voir. Un fichier avec une tabulation à un endroit et quatre espaces à un autre a l’air identique dans un éditeur et s’analyse de manière complètement différente, et une valeur qui a ramassé une tabulation de fin est indiscernable d’une autre qui n’en a pas.
Cela mord le plus fort quand un fichier est édité à la main ou assemblé par un script qui a utilisé des espaces quelque part. Tout éditeur correct peut afficher les caractères d’espacement, et activer cela avant de toucher un TSV est une habitude de deux secondes qui prévient une heure de confusion. C’est aussi pourquoi un TSV ne devrait jamais être construit par concaténation de chaînes sans vérifier ce que contiennent les champs.
La spécification IANA est sans nuance : les champs ne peuvent pas contenir de tabulations ni de sauts de ligne, point. Il n’y a pas de mécanisme d’échappement, et c’est précisément ce qui maintient l’analyse simple.
En pratique, deux conventions se sont développées. Certains producteurs les échappent avec des séquences antislash, empruntées au C ; d’autres appliquent un guillemetage de style CSV par-dessus, ce qui réintroduit tout ce que TSV évitait. Aucune n’est universelle, donc un fichier contenant des tabulations embarquées est un fichier dont le lecteur doit correspondre à son producteur. Si vos données contiennent réellement des tabulations ou des sauts de ligne dans les champs, le CSV avec un guillemetage correct est le choix plus honnête.
cut -f3 fichier.tsv extrait la troisième colonne sans lever d’interpréteur CSV. awk ’{print $1, $5}’ fonctionne directement. grep, sort, uniq, wc et leurs voisins traitent un TSV comme un fichier texte structuré, parce que la tabulation est un séparateur de mot dans le shell. Aucun de ces outils n’a besoin de savoir que c’est un TSV, et c’est l’avantage silencieux du format.
Pour un travail plus lourd, csvkit et xsv ajoutent des opérations qui connaissent les en-têtes et les types. Ils sont rapides, lisibles, et s’intègrent dans des pipes comme tout le reste. Le point important, c’est qu’aucun de ces outils ne traite le TSV comme un cas particulier du CSV : la tabulation comme délimiteur est suffisamment répandue pour mériter un traitement natif, et c’est ce qu’elle a.
Un fichier donné sans extension peut être du TSV, du CSV, ou autre chose encore. L’astuce empirique pour distinguer TSV de CSV sans ouvrir le fichier consiste à compter la fréquence du caractère candidat sur la première ligne : la tabulation apparaît un nombre de fois très régulier (un par champ, moins un), alors que la virgule apparaît dans la prose à des fréquences irrégulières. Un script awk d’une ligne fait le diagnostic. Le piège se présente quand le fichier combine les deux délimiteurs dans la même ligne, ce qui peut arriver si un champ texte contient une tabulation, et c’est la raison pour laquelle les outils sérieux permettent de forcer le délimiteur au lieu de le deviner.
Excel ouvre un .txt ou .tsv via la boîte de dialogue d’importation et gère correctement les tabulations, et un double-clic sur un .tsv fait souvent quelque chose de moins utile selon ce qui est enregistré pour l’extension. Il applique aussi exactement la même inférence de type qui ruine les CSV — les zéros initiaux disparaissent, les codes deviennent des dates, les longs identifiants perdent en précision.
Le conseil est donc identique au cas CSV : importez plutôt que d’ouvrir, passez en Texte les colonnes gênantes, et si le destinataire est une personne plutôt qu’un programme, envoyez plutôt du XLSX et supprimez entièrement l’inférence.
CSV quand le fichier va vers une destination inconnue. C’est ce qu’attendent par leur nom les formulaires d’upload, les routines d’import et les logiciels métier, et un outil qui n’accepte qu’un seul des deux accepte CSV.
TSV quand vous contrôlez les deux extrémités et que les données sont en désordre — pleines de virgules, de guillemets et de texte libre — ou que le travail se fait en ligne de commande. L’analyse est plus simple, les pannes sont moins nombreuses, et rien n’a à se mettre d’accord sur des règles de guillemetage.
Convertir entre les deux est mécanique dans un sens et demande de l’attention dans l’autre : CSV vers TSV doit vérifier qu’aucun champ ne contient de tabulation, et TSV vers CSV doit ajouter des guillemets partout où un champ contient une virgule. Un convertisseur qui saute l’une ou l’autre produit un fichier qui a l’air correct et a silencieusement décalé ses colonnes.
TSV est diffusable en flux, ce qui constitue son autre avantage discret. Un fichier de n’importe quelle taille peut se lire ligne par ligne sans le charger en entier, donc un export de plusieurs gigaoctets est exploitable d’une façon dont le tableur équivalent ne l’est pas.
Pour tout ce qui est réellement volumineux et analysé à plusieurs reprises, Parquet est la meilleure destination : en colonnes, compressé, typé, et considérablement plus rapide pour les requêtes que les gens exécutent réellement. TSV est le bon format pour l’échange et le mauvais pour un jeu de données qu’on va lire cent fois.
| Extension | .tsv, .tab |
|---|---|
| Type de média | text/tab-separated-values |
| Première publication | 1993 |
| Spécification | IANA text/tab-separated-values |