J'ai créé un script python pour convertir un fichier MOL en SMILES. C'est une histoire qui est partout, mais j'ai lu le fichier MOL (chaîne de caractères au format MOL) à partir de l'entrée standard et j'ai craché SMILES vers la sortie standard. En conséquence, le résultat peut être obtenu sans passer par le fichier, et il peut être utilisé plus facilement.
La source est la suivante.
Mol2SMILESConvertor.py
import sys
from rdkit import Chem
def main():
f = sys.stdin
mol_block = ""
for line in f:
mol_block += line
mol = Chem.MolFromMolBlock(mol_block)
smiles = Chem.MolToSmiles(mol)
print(smiles)
if __name__ == "__main__":
main()
L'utilisation est expliquée en utilisant le fichier MOL suivant comme exemple.
test.mol
2,3,6-PCB
RDKit 2D
15 16 0 0 0 0 0 0 0 0999 V2000
1.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2990 -0.7500 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 -1.5000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
0.0000 -3.0008 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-1.2978 -3.7529 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.3380 -3.1546 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
-1.2955 -5.2529 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
-2.3337 -5.8546 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
0.0048 -6.0009 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3026 -5.2488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
1.3002 -3.7488 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
2.3385 -3.1472 0.0000 Cl 0 0 0 0 0 0 0 0 0 0 0 0
1 2 2 0
2 3 1 0
3 4 2 0
4 5 1 0
5 6 2 0
6 1 1 0
6 7 1 0
7 8 2 0
8 9 1 0
8 10 1 0
10 11 1 0
10 12 2 0
12 13 1 0
13 14 2 0
14 7 1 0
14 15 1 0
M END
$$$$
Si vous utilisez le fichier MOL ci-dessus et que vous le transmettez à ce script, vous obtiendrez SMILES comme suit. C'est facile.
$ cat test.mol |python bin/Mol2SMILESConvertor.py
Clc1ccc(Cl)c(-c2ccccc2)c1Cl
--Il serait encore plus pratique de lire un fichier SDF (chaîne de caractères au format SDF) contenant plusieurs composés et de sortir plusieurs SMILES à la fois.
Recommended Posts