1
from rdkit import Chem
mol = Chem.MolFromSmiles(r"""
CCC(CC)COC(=O)[C@H](C)N[P@](=O)(OC[C@H]1O[C@](C#N)([C@H](O)[C@@H]1O)C1=CC=C2N1N=CN=C2N)OC1=CC=CC=C1""")
functional_group = Chem.MolFromSmarts('[CX3](=[OX1])[OX2][CX3](=[OX1])')
matches = mol.GetSubstructMatches(functional_group)

此代码有效,必须通过 将 SMILES 字符串标记为无代码r""" """

但是我如何使它与变量而不是r""" """

smile = '[CX3](=[OX1])[OX2][CX3](=[OX1])'
matches = mol.GetSubstructMatches(smile)

这段代码会返回这个错误

---------------------------------------------------------------------------
ArgumentError                             Traceback (most recent call last)
<ipython-input-58-947d84e4539c> in <module>
----> 1 matches = mol.GetSubstructMatches(smile)

~\miniconda3\envs\tensorflow\lib\site-packages\rdkit\Chem\Draw\IPythonConsole.py in _GetSubstructMatches(mol, query, *args, **kwargs)
    149 
    150 def _GetSubstructMatches(mol, query, *args, **kwargs):
--> 151   res = mol.__GetSubstructMatches(query, *args, **kwargs)
    152   mol.__sssAtoms = []
    153   if highlightSubstructs:

ArgumentError: Python argument types in
    Mol.GetSubstructMatches(Mol, str)
did not match C++ signature:
    GetSubstructMatches(class RDKit::ROMol self, class RDKit::MolBundle query, struct RDKit::SubstructMatchParameters params)
    GetSubstructMatches(class RDKit::ROMol self, class RDKit::ROMol query, struct RDKit::SubstructMatchParameters params)
    GetSubstructMatches(class RDKit::ROMol self, class RDKit::MolBundle query, bool uniquify=True, bool useChirality=False, bool useQueryQueryMatches=False, unsigned int maxMatches=1000)
    GetSubstructMatches(class RDKit::ROMol self, class RDKit::ROMol query, bool uniquify=True, bool useChirality=False, bool useQueryQueryMatches=False, unsigned int maxMatches=1000)
4

1 回答 1

0

您收到该错误是因为您Chem.MolFromSmarts在第二种情况下缺少函数调用。首先将微笑转换为 rdkit 对象,然后进行子结构匹配。

尝试这个:

mol.GetSubstructMatches(Chem.MolFromSmarts(smile))

使用r""" """与它无关。

于 2021-10-11T09:25:12.197 回答