arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |

index.sh (6294B)


      1 #! page
      2 title: Une lettre d\'amour au format TSV
      3 author: Arthur Pons
      4 description: Pourquoi les gens qui prétendent que le format TSV est mort ont tort
      5 publication: 2024-04-25
      6 
      7 sectionmd: main
      8 
      9 [Guillaume Plique](https://medialab.sciencespo.fr/en/people/guillaume-plique)
     10 et [Robin de Mourat](https://medialab.sciencespo.fr/en/people/robin-de-mourat)
     11 ont récemment écrit un article en hommage au CSV (en anglais) disponible en
     12 [html](https://medialab.sciencespo.fr/en/news/a-love-letter-to-the-csv-format/)
     13 ou en
     14 [markdown](https://raw.githubusercontent.com/medialab/xan/prod/docs/LOVE_LETTER.md).
     15 Je les remercie d'avoir diversifié les formats. Un peu moins d'utiliser github.
     16 
     17 J'aime bien le CSV mais je lui préfère le format TSV[^1]. Afin d'expliquer pourquoi
     18 je vais reprendre leur article en le modifiant de façon à mettre en valeur les
     19 avantages du TSV. Une grosse partie des arguments sont tirés d'un [article
     20 comparant CSV et
     21 TSV](https://raw.githubusercontent.com/eBay/tsv-utils/master/docs/comparing-tsv-and-csv.md)
     22 à priori écrit par [Jon Degenhardt](https://github.com/jondegenhardt),
     23 ingénieur chez Ebay pour la doc des outils
     24 [tsv-utils](https://github.com/eBay/tsv-utils) que j'utilise dans l'article sur
     25 la [datascience en cli](/datascience-cli/index.html).
     26 
     27 # Une lettre d'amour au format TSV
     28 
     29 ## Le format TSV est simple
     30 
     31 Le TSV est, dans l'idée, aussi simple que le CSV. Cependant pas besoin de
     32 "quote values containing commas" puisque le délimiteur est une tabulation et
     33 que les données contiennent très très rarement des tabulations. Si elles en
     34 contiennent il faudra également quoter les champs mais dans la pratique ça
     35 arrive suffisamment rarement pour ne pas être un souci. Au delà du fait que
     36 cela rend l'écriture et la génération de fichiers TSV bien plus facile, leurs
     37 parsage en est tellement facilité qu'il est possible d'utiliser les
     38 coreutils[^2] pour les traiter. Pas besoin de logiciels spécifiques. D'ailleurs
     39 l'article d'origine précise au sujet de la simplicité du format CSV "Cela ne
     40 veut pas dire qu'il ne faut pas utiliser de parser dédié, vous allez
     41 ***nécessairement*** vous tromper·"
     42 
     43 Le fait que le délimiteur soit une tabulation a un avantage supplémentaire aux
     44 virgules. La plupart des outils Unix délimitant des champs considérent par défaut
     45 les tabulations ou les blancs comme délimiteurs par défaut. Ainsi vous pourrez
     46 utiliser `< data.tsv cut -f2` sans avoir à spécifier le délimiteur ou, s'il n'y
     47 a pas de blancs dans les données `< data.tsv awk '{blabla}'`. C'est un petit
     48 confort assez anecdotique au premier abord mais qui sur le long terme est
     49 agréable si vous traitez souvent des données.
     50 
     51 ## Le TSV est une idée collective
     52 
     53 Tout pareil que le CSV.
     54 
     55 ## TSV est du texte
     56 
     57 Tout pareil.
     58 
     59 Un souci que l'on m'a déjà fait remonter est la difficulté de
     60 lire du TSV par un·e humain·e puisque, par défaut, les tabulations s'affichent
     61 comme une suite d'espace dans la plupart des éditeurs de texte. Dans la plupart
     62 des bons éditeurs de texte il est possible de modifier l'apparence des caractères
     63 invisibles. Par exemple, pour vim, vous pouvez ajouter dans votre `.vimrc` :
     64 
     65 	set invlist
     66 	" tab = 3 espaces et un pipe, espace insécable = carré, espace fin de ligne = rond
     67 	set listchars=tab:\ \ \|,nbsp:▪,trail:○
     68 
     69 de façon à ce que
     70 
     71 	truc	machin	bidule
     72 	blabla	bonjour bip	coucou
     73 
     74 s'affiche comme
     75 
     76 	truc   |machin   |bidule
     77 	blabla   |bonjour bip   |coucou
     78 
     79 Il est aussi possible de jouer avec `vartabstop` pour aligner les champs, de
     80 manière à ce que nos données s'affichent comme ceci :
     81 
     82 	truc     |machin        |bidule
     83 	blabla   |bonjour bip   |coucou
     84 
     85 ## TSV est "streamable"
     86 
     87 Tout pareil.
     88 
     89 Anecdote : Au travail une personne souhaitait acheter un ordinateur très
     90 puissant pour plus de 3000€ avec l'espoir qu'il puisse correctement ouvrir et
     91 traiter des fichiers excel de plusieurs giga. Il avait déjà imaginé tout son
     92 traitement en consultant le contenu d'un fichier pdf descriptif. Lorsqu'il a vu
     93 le résultat de `head data.csv` dans un terminal il était extrêmement surpris.
     94 Il n'avait pas auparavant conçu que l'on puisse ne lire que le début d'un
     95 fichier texte sans tout charger en mémoire. Son expérience des tableurs et la
     96 manière dont ils gèrent les les fichiers csv ou tsv lui faisait penser que des
     97 fichiers de plusieurs giga nécessitaient forcément une grosse puissance.
     98 Évidemment le traitement de plusieurs giga de données restera long et pourra
     99 toujours être grandement accéléré par du meilleur matériel[^3] mais la quantité
    100 de mémoire vive est une variable assez peu importante.
    101 
    102 ## TSV est succint
    103 
    104 Pareil mais plus parce que l'on échappe rarement les champs avec des
    105 apostrophes.
    106 
    107 ## TSV à l'envers c'est toujours du TSV
    108 
    109 Pareil. Je n'avais jamais pensé à cela, c'est intéressant.
    110 
    111 ## Excel déteste le TSV
    112 
    113 Il est vrai qu'excel prend ses aises avec les CSV et les TSV. Il mettra parfois
    114 des virgules, parfois des points virgule, changera parfois l'encodage. Je ne sais
    115 pas si les auteurs de l'article prennent excel comme exemple de tous les tableurs
    116 mais je ne pense pas puisqu'il me semble que libreoffice calc respecte bien ces
    117 formats là.
    118 
    119 ## Conclusion
    120 
    121 Faire du CSV plutôt que du TSV n'est pas grave mais je pense que c'est
    122 préférable et que ça ne présente que des avantages. L'outillage nécessaire pour
    123 les traiter, surtout pour des traitements simples, sera plus basique, plus
    124 stable, moins spécifique. Les traitements seront plus rapides. Les fichiers un
    125 peu plus légers[^4]. La lecture par des personnes est plus facile.
    126 
    127 Si vous êtes convaincu·es par ces arguments et souhaitez convertir des fichiers
    128 CV existants en TSV je recommande le programme
    129 [csv2tsv](https://github.com/eBay/tsv-utils?tab=readme-ov-file#csv2tsv).
    130 
    131 
    132 
    133 
    134 [^1]: Tab-Separated Values (TSV). Les champs sont séparés par des tabulations.
    135 [^2]: cat, ls, cp, sort, uniq, grep etc. https://fr.wikipedia.org/wiki/GNU_Core_Utilities (ou autre variantes non GNU)
    136 [^3]: quoi que cela dépend également de la complexité du traitement
    137 [^4]: 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.