rdkit 读取mol sdf 的名字和自定义属性字段

首先 sdf格式  https://blog.csdn.net/u012325865/article/details/82383983

第一行:一般作为分子名字,如 Levetiracetam

第二行:注释,ChemDraw06111413562D

第三行:一般是空行

第四行:是原子个数 键的个数等的起始行。

M  END所在行结束原子个数 键的个数等信息。

属性1

属性1值

空行

属性2

属性2值

空行

(以四个美元符号结束一个分子的信息存储。)

Levetiracetam
  ChemDraw06111413562D
 
 12 12  0  0  0  0  0  0  0  0999 V2000
   -1.4405   -0.4285    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
   -0.7260   -0.8410    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.0116   -0.4285    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.7029   -0.8410    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.4174   -0.4285    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.0116    0.3965    0.0000 N   0  0  0  0  0  0  0  0  0  0  0  0
   -0.7260   -1.6660    0.0000 N   0  0  0  0  0  0  0  0  0  0  0  0
    0.6559    0.8814    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    0.4009    1.6660    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.4241    1.6660    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
   -0.6790    0.8814    0.0000 C   0  0  0  0  0  0  0  0  0  0  0  0
    1.4405    0.6265    0.0000 O   0  0  0  0  0  0  0  0  0  0  0  0
  1  2  2  0      
  2  3  1  0      
  3  4  1  1      
  4  5  1  0      
  3  6  1  0      
  2  7  1  0      
  6  8  1  0      
  8  9  1  0      
  9 10  1  0      
 10 11  1  0      
 11  6  1  0      
  8 12  2  0      
M  END
>  <Catalog Number> (1)
A1198
 
>  <Item Name> (1)
Levetiracetam
 
>  <Formula> (1)
C8H14N2O2
 
>  <MolWeight> (1)
170.21
 
>  <CAS Number> (1)
102767-28-2
 
>  <Target> (1)
Cancer Biology
 
$$$$

原子坐标,键这些字段,都是直接就读到了,其他字段怎么读

rdkit教程里说的不是太清楚 http://rdkit.chenzhaoqiang.com/basicManual.html#id3

在github上读了一些源码  https://github.com/rdkit/rdkit/blob/master/rdkit/Chem/ChemUtils/SDFToCSV.py

大概明白了 

    mols = Chem.SDMolSupplier(XXX.sdf')
    print(type(mols))
    for mol1 in mols:
        #名字
        name = mol1.GetProp('_Name')
        print(name)
        #其他非标准的属性
        propNames = list(mol1.GetPropNames())
        #['Temperature [K]', 'XXX ID', 'Field Strength [MHz]', 'Solvent']
        print(propNames)
        p_solvent = mol1.GetProp('Solvent')

注意

1  _Name 是隐藏的属性,默认就是rdkit parse出的第一行文本,如果sdf第一行是整个数据库的文字说明之类,那么第一个分子的_Name属性是就是这段说明,可能不能正确得到name

2 注释部分,暂时不知道怎么读 似乎丢弃了

3  GetPropNames 方法 可以parse到 全部

>  <XXX>

这样的属性,已经够用了

原文地址:https://www.cnblogs.com/xuanmanstein/p/13678297.html