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>

這樣的屬性,已經夠用了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM