首先 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>
這樣的屬性,已經夠用了