Une extension du parseur (standard) Python permettent de gérer des annotations (par exemple des lignes de commentaires) portant sur la table, des blocs de lignes, ou des lignes individuelles. Des fonctions permettent aussi de surcharger la table CSVM par des informations (par exemple des couples clés – valeurs) qui ne sont ni des données, ni des métadonnées (au sens CSVM). L’ensemble de ces informations (notamment les commentaires) resteront attachées à l’ilot de données, tout en gardant un format simple et ‘tableur’ compatible. Les applications sont multiples, par exemple ajouter une description ‘orthogonale’ à des données, ou des blocs de paramètres concernant un processus (expérimental, calcul, collecte …) ayant conduit à la génération de la table.
Article mis à jour en octobre 2025.
1. Conservation des commentaires
Gérer des lignes de commentaires (commençant par un caractère #) autre que les métadonnées était un enjeu, dès la conception du format et du parseur. Même si ces lignes n’étaient exploitées (dans le bloc DATA), il fallait qu’elles puissent être lues, conservées le long du cycle de vie de l’objet csvm_ptr et enregistrées lors de la sauvegarde d’un nouveau fichier.
Pour y arriver, l’objet csvm_ptr inclue les champs RTABLE et RTABLE_N (nombre de lignes dans la matrice RTABLE) pour l’enregistrement des commentaires présents dans un fichier CSVM. Prenons l’exemple d’un fichier CSVM incluant des commentaires un peu partout (lignes # en vert), y compris après le bloc de métadonnées :
![]() |
Nous pouvons lire ce fichier avec la fonction csvm_ptr_read_extended_csvm qui est la fonction standard de lecture du module buildez.parsers.csvm. Sans autre précision les commentaires seront supprimés à la lecture, ils ne font pas partie de la table CSVM. Mais parfois nous pouvons avoir besoin de garder ces méta informations pendant le cycle de vie de la table. Par exemple si celle ci est découpée en sections, avec des explications sur le bloc qui suit. C’est un cas courant pour les expérimentateurs, nous avons parfois besoin de laisser une annotation concernant un bloc de lignes de données.
Dans ce cas, la fonction csvm_ptr_read_extended_csvm peut être activée avec l’argument save_rems=True (par défaut il est à False), par exemple :
|
1 2 3 4 |
print("*** CSVM test with remarks conservation") c = csvm_ptr() c = csvm_ptr_read_extended_csvm(c, filename, "\t", save_rems=True, encoding=False, debug=0) c.csvm_ptr_dump(0,0) |
Ce qui nous donne un affichage brut (RAW) de la structure de données RTABLE, après le bloc DATA (en rouge). En cyan nous avons les lignes de commentaires, un item par lignes consécutives de commentaires dans le fichier CSVM. Nous avons aussi (-> en bleu) les lignes du fichier CSVM qui suivent immédiatement ces blocs de commentaires :
*** CSVM test with remarks conservation
|
Nous constatons que les commentaires sont correctement embarqués, avec un format byte pour les chaines de caractères. Les commentaires après le bloc de métadonnées ne sont pas conservés, ce qui permet un niveau d’adaptation supplémentaire (ex: si nous voulions garder seulement des informations ici, sans les faire suivre dans le cycle de vie de la table).
Pour régénérer le fichier CSVM, il nous faut créer une chaine de caractères s au format CSVM avec la fonction csvm_ptr_make_csvm du module csvm. Il faudra activer l’option save_rems en lui fournissant un jeu de paramètres (dictionnaire créé par str_compare_defpars). Ces paramètres sont utilisés par les primitives str_compare et str_vec_compare du module buildez.str (utilisées pour des mesures de similarité entre chaines de caractères).
|
1 2 3 4 5 6 7 8 9 |
print("Reconstructed (with remarks) CSVM string") pars = str_compare_defpars(mode='vec') pars = str_compare_defpars(mode='str') print("Parameter's set:", pars) s = csvm_ptr_make_csvm(c, "\n", "\t", save_rule=False, save_rems=True, spars=pars) print("="*77) print(s) print("="*77) file_str2file(filename2, s) |
Nous pouvons utiliser la primitive file_str2file (du module buildez.file) pour sauver la chaine s, si nous affichons (affichage tronqué) s nous aurons :
![]() |
Nous constatons que nous avons bien une conservation des commentaires dans l’export CSVM, à l’exception de ceux qui étaient après le bloc de métadonnées.

