Quelques pistes pour exporter une collection de molécules et de données qui contenue dans un tableur (nous parlerons d’une table moléculaire). L’objectif est d’aboutir à un fichier SDF ou un mécanisme qui nous permette de conserver et d’utiliser les molécules, de les visualiser de manière à pouvoir les corriger avant qu’elles ne rentrent dans un autre workflow.
1. Export direct avec JChem4Office et Excel
Si notre écosystème inclue ChemAxon JChem et Microsoft Excel, les choses sont très simples. Il ne faut pas confondre JChem, Instant JChem qui sont des outils de base de données avec JChem for Office (ou Jchem for Excel) qui est une extension Excel permettant à celui ci de gérer des molécules en tant qu’objets interfacés avec Marvin. Nous ne parlons pas ici d’images plus ou moins redimensionnables ou des liaisons OLE, non il s’agit d’une véritable intégration, avec la possibilité de faire quelques calculs/conversions et de les reporter dans les autres colonnes Excel. Par défaut les objets ChemAxon sont dans une colonne nommée Structure.
Je pars d’une table de molécules en mode Jchem/Excel (figure suivante). Dans cet exemple, il faut utiliser les fonctions ‘Export‘ de JChem qui permettent générer un fichier SDF et renseigner dans l’onglet ‘File‘ la colonne qui sera utilisée pour le nom des molécules (colonne CID dans l’exemple). Si ce champ n’est pas renseigné, JChem le remplira avec une chaîne SMILES correspondant à la molécule.
![]() |
Une fois les options d’export paramétrées, le fichier SDF est généré. L’image suivante montre le début du fichier SDF, tel qu’il apparait avec MarvinView en affichant la valeur des champs générés à partir des colonnes de la feuille Excel.
Nous constatons que la molécule A5 (cf .image précédente) est absente de la table, la cinquième molécule correspond à la molécule A6, ce qui peut se comprendre puisque il n’y avait pas de structure attribuée à l’identifiant A5 de cette table. JChem a donc ‘sauté’ cette molécule ainsi que les lignes du même type.
Le fichier SDF produit de cette manière ne peut donc pas être considéré comme une source de données primaires, le fichier Excel est plus adapté de ce point de vue.
![]() |
Nous notons aussi que les sauts de lignes explicites dans les cellules sont reportés dans les champs SDF (par exemple champs Confidence et Local-ID dans la première molécule. Nous notons également que la colonne Stock n’apparait pas sous forme de champ dans le fichier SDF, l’explication sera donnée par la suite.
Dans le fichier SDF utilisé pour l’exemple, l’export de la colonne SMILES n’a pas été activé (second onglet ‘Columns‘ de la fenêtre d’exportation présentée plus haut). Si ce n’est pas le cas, le contenu de la colonne SMILES apparaitrait comme un champ ordinaire du fichier SDF.
Pourquoi stocker, en même temps que les structures, des chaines SMILES ? L’information est dupliquée, c’est une source d’erreur si on modifie les formules sans méthode. En réalité, dans un vrai travail, c’est les SMILES qui sont prépondérants. La personne qui collecte, les introduits dans la table, la colonne Structure permet juste l’affichage de manière à obtenir une validation par les chimistes. C’est dans ce sens que nous faisons marcher les choses, on ne dessine jamais une molécule en cliquant dans une cellule d’une table, mais on la copie colle à partir d’un logiciel d’un logiciel de dessin de molécules (Marvin, ChemDraw, Biovia …) capable de copier en SMILES.
Avec un autre tableur ?
ChemAxon JChem for Office n’existe qu’associé à Excel, avec des différentiels au niveau du runtime (composants Microsoft ou Java) selon les versions des deux partenaires. Ce qui veut dire qu’avec un autre tableur et OS, il faudra s’en passer. Mais rassurez vous, nous avons plus d’un tour dans notre sac.
2. Exporter au format CSV/SMI
Excel ou pas nous pouvons introduire les molécules au format SMILES dans les cellules d’un tableur. Si nous utilisons JChem/Excel, l’export ne concernera que la colonne SMILES et non la colonne Structure, qu’il est impossible d’exporter au format CSV (celle ci sera présente dans le fichier CSV, mais elle ne comportera pas de données).
Dans tous les cas, pour exporter, il suffit d’utiliser les fonctions de base du tableur, le séparateur utilisé correspondra au point-virgule. Le contenu du fichier CSV, après exportation, pourra être visualisé dans un éditeur de texte tel que SciTE avec les caractères de fin de lignes (CR-LF, LF) apparents.
![]() |
Nous constatons que les sauts de lignes explicites ont été bien pris en compte par Excel, et sont marqués par des caractères LF de fin de ligne et non CR-LF comme les ‘véritables’ lignes, par exemple la première molécule A1 apparait de la manière suivante:
|
1 2 3 |
C(N1CCC(=C1)C1=CC=CC=C1)C1=CC=CC=C1;01;A1;;"False N";n.d.;"NG7 7,157";2; |
Pour que le fichier CSV soit valide sur PC/Windows, cette ligne doit apparaitre sans retours de lignes marqués par des LF, donc nous les remplaçons par des espaces, ce qui donne :
|
1 |
C(N1CCC(=C1)C1=CC=CC=C1)C1=CC=CC=C1;01;A1;;"False N";n.d.;"NG7 7,157";2; |
Ce type de correction et d’autres seront effectuées pour la génération d’un fichier CSVM, qui est plus intéressant dans une optique ‘données’ (workflow et fichier pivot).
3. Générer un fichier CSVM
Le fichier CSVM se génère de la même manière qu’un fichier CSV, les opérations à réaliser avec SciTE sont les suivantes:
- Remplacement des LF (et on CR-LF) par des espaces ou une autre chaine de caractères (par exemple
§ou encore<BR>). - Transformation des
;enTABs(flèches sur l’image suivante). - Elimination de la colonne
Structure. - Remplacement optionnel des
n.d.par le caractère-(que j’ai l’habitude d’appeler blank). - Remplacement des cellules vides par des cellules incorporant le caractère
-(début des lignes, fin des lignes, cellules à l’intérieur des lignes). - Elimination (optionnelle) des
"(double-quote). - Mise en place des métadonnées (
#TITLE,#HEADER,#TYPE,#WIDTH,#META).
Ces opérations peuvent être facilement automatisées par un programme Python, Perl … capable de lire les fichiers CSV au moyen de fonction traitant les chaines de caractères. Une fois ces opérations réalisées, la seconde partie du fichier CSVM peut être explorée avec SciTE:
![]() |
Une question qui se pose est de pouvoir vérifier ces fichiers CSV ou CSVM le plus simplement possible. L’idéal est de les lire directement avec un outil tel que Marvin View, qui permet également de modifier les structures. A ce niveau il faudra cependant être très strict dans l’ordre du workflow, s’il y a modification de structure, il vaut mieux les faire (ou les reporter) au niveau du fichier Excel puis de re-générer les fichiers SDF et/ou CSV/CSVM.
4. CSVM et collection de SMILES
Les règles sont simples, il y en a deux: i) la colonne comportant les structures moléculaires doit être la première colonne à gauche et ii) les cellules de cette colonne sans molécule doivent utiliser le caractère ‘*‘ qui en notation SMILES signifie n’importe quel type d’atome (chaine ‘[*]‘). Une fois ces conditions remplies (ce qui correspond au cas précédent) le fichier doit être renommé avec l’extension .smiles ou .smi en place de .csvm, il est ensuite interprétable par Marvin View et Marvin Sketch:
![]() |
Nous constatons que la molécule A5 est, cette fois, correctement interprétée et apparait sous la forme d’un grand A. Donc nous avons fait du SDF sans le dire, nous gardons les formules et les valeurs des descripteurs, mais nous perdons les noms des descripteurs. D’autres exemples de fichiers SMILES multi-moléculaires sont visibles dans l’article [ https://buildblog.buildez.fr/formats-moleculaires-smiles/ ]. Nous pouvons faire la même chose en pur CSV, l’avantage du CSVM, c’est que le nom des colonnes (donc des identifiants de descripteurs) est embarqué dans le fichier (à la fin) et qu’il ne perturbe pas l’interprétation par Marvin View.
Cette méthode peut être utilisée pour visualiser rapidement un fichier CSVM contenant au moins une colonne de molécules sous le format SMILES. Cependant, il est préférable d’ouvrir le fichier SMI à partir du menu de Marvin View, le clic direct, le drag and drop ne fonctionnent pas toujours correctement.
A noter que la plupart des autres outils (DataWarrior, Discovery Studio …) ne permettent pas de lire ces types de fichiers hybrides CSV et SMILES.
5. Au niveau logiciel
Les paquetages buildez.chem.pybel_interface et buildez.chem.rdkit_interface incluent des interfaces SDF, SMI, CSVM parfaitement interopérables pour l’import, la transformation, l’export de tables moléculaires et basées sur les objets molecule correspondant à chaque toolkit.
Un exemple-test avec le module pybel_interface.pybel_sdf.py. Nous chargeons un fichier SDF (fonction pybel_sdf2mols), nous ajoutons à la suite un autre fichier SDF (fonction pybel_addmols2sdf). Nous pouvons recharger le fichier SDF résultant, puis le sauver au format CSVM incluant des chaines SMILES (fonction pybel_sdf2csvm).
Intérêt d’une approche logicielle ? Par exemple, si les deux fichiers SDF n’avaient pas les mêmes descripteurs, ceux ci sont reportés (éventuellement avec des valeurs vides) dans l’ensemble des molécules de la collection, qui reste cohérente, ce qui est facile avec le paradigme CSVM et transparent pour l’utilisateur.
|
1 2 3 4 5 6 7 8 9 10 11 |
print("Test pybel_sdf2mols") mols = pybel_sdf2mols(file_cleanpath(td + "hoffmann.sdf")) print("Number of molecules is %d" % (len(mols))) print("Adding another SDF file of 2 mols with not all the same fields") pybel_addmols2sdf(file_cleanpath(td + "test60.sdf"), file_cleanpath(td + "test61.sdf"), mols) print("-> the first infile of pybel_addmols2sdf wins") print("Loading the new SDF file") mols = pybel_sdf2mols(file_cleanpath(td + "test61.sdf")) print("Number of molecules is now %d " % (len(mols))) print("Save it as CSVM file with smi strings") pybel_sdf2csvm(file_cleanpath(td + "test61.sdf"), file_cleanpath(td + "test61.csvm"), 'smi') |
Nous pouvons reprendre le fichier CSVM, le transformer en liste de molécules (objets Pybel.Molecule, fonction pybel_sdf2mols) et faire des opérations sur ces molécules (hydrogénation, optimisation 3d …) ou des calculs de descripteurs (par exemple masse moléculaires) permis par le toolkit, puis exporter la liste en fichier SDF.
6. Conclusion
Le fichier CSVM est utilisable soit en tant que source de données primaires, car il est directement lisible, soit en tant que fichier pivot, nous passons également de 100 Ko (Excel) à 6 Ko (CSVM-SMILES) en ce qui concerne la taille de fichier.
Cependant le fichier Excel reste le format à privilégier pour les chimistes, même si des outils conviviaux tels que DataWarrior commencent à être utilisés par les end users.
Le fichier Excel correspond à ce que nous appelons un ‘master’ (prends en compte toutes les modifications et corrections) et le fichier CSVM aux données primaires à finalité conservatoire (il s’agit de deux choses différentes) et c’est lui qui va rentrer dans un workflow numérique.
Liens et lectures
- ChemAxon [ https://en.wikipedia.org/wiki/Chemaxon ].
- ChemAxon JChem for Office et JChem for Office Lite [ https://chemaxon.com/jchem-for-office ].
- Object Linking and Embedding (OLE) [ https://fr.wikipedia.org/wiki/Object_Linking_and_Embedding ].
- DataWarrior [ https://openmolecules.org/datawarrior/ ].




