我正在try 使用rdkit python库将inchi转换为sdf格式.我正在运行以下一行python代码.

#convert inchi to sdf

def MolFromInchi(id,inchi):
    mol = Chem.MolFromInchi(inchi)
    mol_block = Chem.MolToMolBlock(mol)
    print (id, mol_block)
    print ('$$$$')
    
with open (r'C:/Users/inchi_canonize') as f:                                                                                   
    for line in f:
        lst=line.split(' ')
        elements = [x for x in lst if x]   #remove empty elements and get id (elements[0]) and inchis (elements[1])
        elements[1] = ('\''+elements[1].strip()+'\'')
        id = elements[0]
        inchi = elements[1].rstrip("\n")
        print (inchi)
        MolFromInchi(id,inchi)


输入文件(inchi_canonize)有以下字段.

D08520   InChI=1S/C10H18O2/c1-7-4-5-8(6-9(7)11)10(2,3)12/h4,8-9,11-12H,5-6H2,1-3H3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
D07548   InChI=1S/C17H25NO4.ClH/c1-20-13-11-15(21-2)17(16(12-13)22-3)14(19)7-6-10-18-8-4-5-9-18;/h11-12H,4-10H2,1-3H3;1H                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
D10000   (null)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

以下是错误:

ArgumentError: Python argument types in
    rdkit.Chem.rdmolfiles.MolToMolBlock(NoneType)
did not match C++ signature:
    MolToMolBlock(class RDKit::ROMol mol, bool includeStereo=True, int confId=-1, bool kekulize=True, bool forceV3000=False)

非常感谢您的帮助

推荐答案

问题是elements[1] = ('\''+elements[1].strip()+'\'').

InChI已经是一个字符串了,你可以加上'" "'.

你的英奇现在"'InChI=1S/C10H18O2/c1-7-4-5-8(6-9(7)11)10(2,3)12/h4,8-9,11-12H,5-6H2,1-3H3'"岁了

而不是InChI=1S/C10H18O2/c1-7-4-5-8(6-9(7)11)10(2,3)12/h4,8-9,11-12H,5-6H2,1-3H3.

此外,您应该插入一个复选框,因为否则您也会try 将(null)转换为molblock.

顺便说一下,你可以用Chem.SDWriter来写SDF.

from rdkit import Chem

mols = []
ids = []
inchis = []

with open(r'D:\Z\inchi_canonize.txt') as f:                                                                                   
    for line in f:
        lst=line.split(' ')
        elements = [x for x in lst if x]
        inchi = elements[1].rstrip("\n")
        mol = Chem.MolFromInchi(inchi)
        if mol is not None:
            mols.append(mol)
            ids.append(elements[0])
            inchis.append(inchi)

w = Chem.SDWriter('foo.sdf')

for n in range(len(mols)):
    mols[n].SetProp('_Name', inchis[n]) # set a title line
    mols[n].SetProp('ID', ids[n] ) # set an associated data
    w.write(mols[n])

w.close()

Python相关问答推荐

Pandas或pyspark跨越列创建

重命名变量并使用载体中的字符串存储 Select 该变量

如何从不同长度的HTML表格中抓取准确的字段?

有什么方法可以修复奇怪的y轴Python matplotlib图吗?

如何在Pygame中绘制右对齐的文本?

如何在矩阵上并行化简单循环?

使用Beautiful Soup获取第二个srcset属性

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

Pandas 在时间序列中设定频率

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

使用mySQL的SQlalchemy过滤重叠时间段

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

运行总计基于多列pandas的分组和总和

计算组中唯一值的数量

基于字符串匹配条件合并两个帧

NumPy中条件嵌套for循环的向量化

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

连接一个rabrame和另一个1d rabrame不是问题,但当使用[...]'运算符会产生不同的结果

Tkinter菜单自发添加额外项目