0

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

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

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

此脚本不起作用并返回:

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

我将如何纠正这个问题?

谢谢!

4

1 回答 1

1

您将字符串“结果”转换为 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
于 2018-11-12T17:37:15.630 回答