- Le format TSV est simple
- Le TSV est une idée collective
- TSV est du texte
- TSV est “streamable”
- TSV est succint
- TSV à l’envers c’est toujours du TSV
- Excel déteste le TSV
- Conclusion
Guillaume Plique et Robin de Mourat ont récemment écrit un article en hommage au CSV (en anglais) disponible en html ou en markdown. Je les remercie d’avoir diversifié les formats. Un peu moins d’utiliser github.
J’aime bien le CSV mais je lui préfère le format TSV1. Afin d’expliquer pourquoi je vais reprendre leur article en le modifiant de façon à mettre en valeur les avantages du TSV. Une grosse partie des arguments sont tirés d’un article comparant CSV et TSV à priori écrit par Jon Degenhardt, ingénieur chez Ebay pour la doc des outils tsv-utils que j’utilise dans l’article sur la datascience en cli.
Une lettre d’amour au format TSV
Le format TSV est simple
Le TSV est, dans l’idée, aussi simple que le CSV. Cependant pas besoin de “quote values containing commas” puisque le délimiteur est une tabulation et que les données contiennent très très rarement des tabulations. Si elles en contiennent il faudra également quoter les champs mais dans la pratique ça arrive suffisamment rarement pour ne pas être un souci. Au delà du fait que cela rend l’écriture et la génération de fichiers TSV bien plus facile, leurs parsage en est tellement facilité qu’il est possible d’utiliser les coreutils2 pour les traiter. Pas besoin de logiciels spécifiques. D’ailleurs l’article d’origine précise au sujet de la simplicité du format CSV “Cela ne veut pas dire qu’il ne faut pas utiliser de parser dédié, vous allez nécessairement vous tromper·”
Le fait que le délimiteur soit une tabulation a un avantage supplémentaire aux
virgules. La plupart des outils Unix délimitant des champs considérent par défaut
les tabulations ou les blancs comme délimiteurs par défaut. Ainsi vous pourrez
utiliser < data.tsv cut -f2
sans avoir à spécifier le délimiteur ou, s’il n’y
a pas de blancs dans les données < data.tsv awk '{blabla}'
. C’est un petit
confort assez anecdotique au premier abord mais qui sur le long terme est
agréable si vous traitez souvent des données.
Le TSV est une idée collective
Tout pareil que le CSV.
TSV est du texte
Tout pareil.
Un souci que l’on m’a déjà fait remonter est la difficulté de
lire du TSV par un·e humain·e puisque, par défaut, les tabulations s’affichent
comme une suite d’espace dans la plupart des éditeurs de texte. Dans la plupart
des bons éditeurs de texte il est possible de modifier l’apparence des caractères
invisibles. Par exemple, pour vim, vous pouvez ajouter dans votre .vimrc
:
set invlist
" tab = 3 espaces et un pipe, espace insécable = carré, espace fin de ligne = rond
set listchars=tab:\ \ \|,nbsp:▪,trail:○
de façon à ce que
truc machin bidule
blabla bonjour bip coucou
s’affiche comme
truc |machin |bidule
blabla |bonjour bip |coucou
Il est aussi possible de jouer avec vartabstop
pour aligner les champs, de
manière à ce que nos données s’affichent comme ceci :
truc |machin |bidule
blabla |bonjour bip |coucou
TSV est “streamable”
Tout pareil.
Anecdote : Au travail une personne souhaitait acheter un ordinateur très
puissant pour plus de 3000€ avec l’espoir qu’il puisse correctement ouvrir et
traiter des fichiers excel de plusieurs giga. Il avait déjà imaginé tout son
traitement en consultant le contenu d’un fichier pdf descriptif. Lorsqu’il a vu
le résultat de head data.csv
dans un terminal il était extrêmement surpris.
Il n’avait pas auparavant conçu que l’on puisse ne lire que le début d’un
fichier texte sans tout charger en mémoire. Son expérience des tableurs et la
manière dont ils gèrent les les fichiers csv ou tsv lui faisait penser que des
fichiers de plusieurs giga nécessitaient forcément une grosse puissance.
Évidemment le traitement de plusieurs giga de données restera long et pourra
toujours être grandement accéléré par du meilleur matériel3 mais la quantité
de mémoire vive est une variable assez peu importante.
TSV est succint
Pareil mais plus parce que l’on échappe rarement les champs avec des apostrophes.
TSV à l’envers c’est toujours du TSV
Pareil. Je n’avais jamais pensé à cela, c’est intéressant.
Excel déteste le TSV
Il est vrai qu’excel prend ses aises avec les CSV et les TSV. Il mettra parfois des virgules, parfois des points virgule, changera parfois l’encodage. Je ne sais pas si les auteurs de l’article prennent excel comme exemple de tous les tableurs mais je ne pense pas puisqu’il me semble que libreoffice calc respecte bien ces formats là.
Conclusion
Faire du CSV plutôt que du TSV n’est pas grave mais je pense que c’est préférable et que ça ne présente que des avantages. L’outillage nécessaire pour les traiter, surtout pour des traitements simples, sera plus basique, plus stable, moins spécifique. Les traitements seront plus rapides. Les fichiers un peu plus légers4. La lecture par des personnes est plus facile.
Si vous êtes convaincu·es par ces arguments et souhaitez convertir des fichiers CV existants en TSV je recommande le programme csv2tsv.
-
Tab-Separated Values (TSV). Les champs sont séparés par des tabulations. ↩
-
cat, ls, cp, sort, uniq, grep etc. https://fr.wikipedia.org/wiki/GNU_Core_Utilities (ou autre variantes non GNU) ↩
-
quoi que cela dépend également de la complexité du traitement ↩
-
j’ai testé sur un fichier csv de 1Go avec quelques apostrophes par ligne, j’obtiens une économie d’environ 6% donc bon, à moins que le stockage soit un élément déterminant c’est presque négligeable. ↩