Afegir el títol de la molècula a l’sdf amb pybel
Pybel és un conjunt de classes escrites en Python per treballar amb l’OpenBabel. És una eina molt potent que et permet fer ús de totes les utilitats de l’OpenBabel des de Python. Jo l’empro molt i a diari!
Per, per exemple, llegir un smile i escriure’n un sdf només cal fer el següent:
1 2 3 4 5 6 7 8 9 10 11 12 | #Importar el pybel from pybel import * #Ara llegirem l'smile mol = readstring('smi', 'CCCC(Cl)CCF') #Obrim el fitxer de sortida out =Outputfile('sdf','NomDelFitxer.sdf') #Hi escrivim i tanquem out.write(mol) out.close() |
Això va molt bé però m’he trobat que escriu sdfs sense posar cap títol (nom) a les molècules. Pel que ho estic emprant ara però, necessito posar els InchiK com a títol de cada molècula. Hi he estat hores i hores, intentant entendre la classe “Outputfile”, però he desistit, no crec que es pugui fer, així, directament.
Com a alternativa he decidit emprar els mètodes natius de Python per escriure fitxers, barrejat amb el Pybel (l’opció molecula.write). Així doncs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #Importar el pybel from pybel import * #Ara llegirem l'smile mol = readstring('smi', 'CCCC(Cl)CCF') #Obrim el fitxer de sortida (tal com es fa amb Python). Li diem que és per escriure out = open('NomDelFitxer.sdf','w') #Hi escrivim el títol out.write('TítolDeLaMolecula') #I ara, la molècula out.write(mol.write('sdf')) #Finalment, tanquem out.close() |
De moment, és l’única solució que he trobat i va prou bé.



Una proposta alternativa:
from pybel import *
mol = readstring(’smi’, ‘CCCC(Cl)CCF’)
mol.OBMol.SetTitle(”Nom de la molecula”)
mol.write(”sdf”, “fitxer.sdf”)
No és ben bé directament pequè s’ha de tocar la classe OBMol, però fa el fet.
Merci Xavi, he estat dues hores estudiant les classes de pybel i he estat incapaç de veure-ho. Demà ho provo.
@Xa5i, Alfons: You could also use mol.title = “Nom de la molecula”. The list of attributes of molecules is displayed if you type “help(pybel.Molecule)”.