rdkit包的导入
先在pycharm里面安装rdkit 包,不多解释。
SMILES
Simplified Molecular-Input Line-Entry System是最受欢迎的表示之一,是一种用字符串明确描述分子结构的规范。
原子的化学符号表示:
原子由各自的原子符号表示,省略氢原子,氢原子根据价数进行复原,比如水的表示就是O,乙醇是CCO
双键用=表示,三键用#表示:
含有双键的二氧化碳为O=C=O,含有三键的氰化氢为C#N;
碳链上的分支用圆括号表示:丙酸表示为CCC(=O)O
原文链接
提示:分子的smiles,InChIKey等字符可以用chemdraw导出
分子字符组成
分析smiles字符的组成,可以发现常用表示如下:
分子元素:CNSO
双键:=
三键:#
支链:()
分子个数:12
随机生成分子
综上,我们可以利用随机smiles,随机生成分子,代码如下
from rdkit import Chem
from rdkit.Chem import Draw
import random
#分子的大小1-20
n = random.randint(2, 15)
#先定义一个空的smiles字符
smiles = ''
#选择常见的原子和环来生成随机分子
for i in range(n):
smiles = smiles + random.choice(["C", "O", "1", "2", "N", "=", "c", "S"])
#看一下离谱的smiles
print(smiles)
#保存一下离谱的smiles(可能报错,重新运行一下就好了)
mol = Chem.MolFromSmiles(smiles)
#画出离谱的随机分子
Draw.MolToImageFile(mol, 'mol.jpg')
随机生成分子(暴力)
你可能觉得要一直生成才有正确的分子,怎么办?
帮我用smiles规则优化一下算法(狗头)
当然也可以麻烦一下计算机(暴力)
from rdkit import Chem
from rdkit.Chem import Draw
import random
from rdkit import Chem
from rdkit.Chem import Draw
import random
#定义不多说
n = random.randint(2,