首先 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>
这样的属性,已经够用了