使用RDKit将微笑字符串['x','y','z']的列表转换为mol文件或MDL mol块

时间:2018-11-12 00:50:39

标签: python-3.x spyder rdkit

我生成了一个微笑字符串列表,并将其定义为“结果”

我想使用RDKit将列表中的每个SMILES字符串转换为单独的mol文件。我当前的代码是这样:

m = Chem.MolFromSmiles('result')
print(Chem.MolToMolBlock(m))

此脚本不起作用并返回:

  

ArgumentError:中的Python参数类型       rdkit.Chem.rdmolfiles.MolToMolBlock(NoneType)与C ++签名不匹配:       MolToMolBlock(RDKit :: ROMol mol,bool includeStereo = True,int confId = -1,bool kekulize = True,bool forceV3000 = False)

我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

您已将字符串“结果”转换为RDKit mol对象。而且这不能转换为Molblock。 变量名称不是字符串,因此请勿在引号中使用它们。

首先,您必须将SMILES逐一转换为mol对象。

from rdkit import Chem
result = ['C', 'CC', 'CCC']
mo = [Chem.MolFromSmiles(r) for r in result]

然后您可以一张一张地打印Molblocks。

for m in mo:
    print(Chem.MolToMolBlock(m))

这将为您提供:

     RDKit          2D

  1  0  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
M  END


     RDKit          2D

  2  1  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    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  2  1  0
M  END


     RDKit          2D

  3  2  0  0  0  0  0  0  0  0999 V2000
    0.0000    0.0000    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
    2.5981   -0.0000    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  1  0
  2  3  1  0
M  END