Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
commit 900e782e2a84787afe8917f2f3e6a91634637ed3 parent 292f3737820262efb208ae999501ee80a53ec7cd Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 24 Apr 2024 15:17:52 +0200 Début de l'article sur le TSV Diffstat:
A | contents/amourtsv/index.sh | | | 94 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 94 insertions(+), 0 deletions(-)
diff --git a/contents/amourtsv/index.sh b/contents/amourtsv/index.sh @@ -0,0 +1,94 @@ +#! page +title: Une lettre d\'amour au format TSV +author: Arthur Pons +description: Pourquoi les gens qui prétendent que le format TSV est mort ont tort +publication: 2024-04-25 + +sectionmd: main + +[Guillaume Plique](https://medialab.sciencespo.fr/en/people/guillaume-plique) +et [Robin de Mourat](https://medialab.sciencespo.fr/en/people/robin-de-mourat) +ont récemment écrit un article en hommage au CSV (en anglais) disponible en +[html](https://medialab.sciencespo.fr/en/news/a-love-letter-to-the-csv-format/) +ou en +[markdown](https://raw.githubusercontent.com/medialab/xan/prod/docs/LOVE_LETTER.md). +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 TSV[^1]. 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](https://raw.githubusercontent.com/eBay/tsv-utils/master/docs/comparing-tsv-and-csv.md) +à priori écrit par [Jon Degenhardt](https://github.com/jondegenhardt), +ingénieur chez Ebay pour la doc des outils +[tsv-utils](https://github.com/eBay/tsv-utils) que j'utilise dans l'article sur +la [datascience en cli](/datascience-cli/index.html). + +# 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 +coreutils[^2] 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 pasd e 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 : + + + +[^1]: Tab-Separated Values (TSV). Les champs sont séparés par des tabulations. +[^2]: cat, ls, cp, sort, uniq, grep etc. https://fr.wikipedia.org/wiki/GNU_Core_Utilities (ou autre variantes non GNU)