Python RDKit化学信息库 3)分子操作与查询

分子不仅仅是静态的结构,在药物化学和虚拟筛选中,常常需要修改分子、提取子结构,或者检测分子是否含有某种特定官能团。
RDKit 的 Chem 模块提供了丰富的 API 用于 分子编辑查询匹配


3.1 分子克隆与拷贝

RDKit 中的分子对象是不可变的(immutable),如果要修改,需要使用 可编辑分子对象 RWMol

from rdkit import Chem

mol = Chem.MolFromSmiles("CCO")
rw_mol = Chem.RWMol(mol)  # 转换为可编辑分子

3.2 原子与键的编辑

3.2.1 添加原子

from rdkit import Chem

rw_mol = Chem.RWMol(Chem.MolFromSmiles("CCO"))
new_atom = rw_mol.AddAtom(Chem.Atom(8))  # 添加一个氧原子 (O)
print("添加原子索引:", new_atom)

3.2.2 添加键

rw_mol.AddBond(2, new_atom, Chem.BondType.SINGLE)  # 在 O (idx=2) 与新 O 之间添加单键
mol_new = rw_mol.GetMol()
print(Chem.MolToSmiles(mol_new))

3.2.3 删除原子/键

rw_mol = Chem.RWMol(Chem.MolFromSmiles("CCO"))
rw_mol.RemoveAtom(2)  # 删除索引为 2 的原子
mol_new = rw_mol.GetMol()
print(Chem.MolToSmiles(mol_new))
rw_mol = Chem.RWMol(Chem.MolFromSmiles("CCO"))
rw_mol.RemoveBond(0, 1)  # 删除原子 0 和 1 之间的键
mol_new = rw_mol.GetMol()
print(Chem.MolToSmiles(mol_new))

3.3 子结构匹配(Substructure Search)

RDKit 支持 SMILES 子结构匹配SMARTS 模式匹配

3.3.1 基本子结构匹配

mol = Chem.MolFromSmiles("CCO")
query = Chem.MolFromSmiles("CO")  # 羟基乙基
matches = mol.GetSubstructMatches(query)
print("匹配结果:", matches)

输出:

匹配结果: ((1, 2),)

说明在 CCO 中,CO 匹配到了原子 (1,2)。


3.3.2 SMARTS 模式匹配

SMARTS 是 SMILES 的扩展,可以描述更复杂的子结构。

mol = Chem.MolFromSmiles("c1ccccc1O")  # 苯酚
smarts = Chem.MolFromSmarts("c-O")     # 芳香碳连接氧
matches = mol.GetSubstructMatches(smarts)
print("匹配结果:", matches)

输出:

匹配结果: ((0, 6),)

3.4 官能团检测

通过 SMARTS 可以检测特定官能团,例如:

  • 羟基(-OH):[OX2H]
  • 羧基(-COOH):C(=O)[OH]
  • 胺基(-NH2):[NX3;H2]
mol = Chem.MolFromSmiles("CC(=O)O")  # 乙酸
carboxy = Chem.MolFromSmarts("C(=O)[OH]")

if mol.HasSubstructMatch(carboxy):
    print("分子中含有羧基")

3.5 分子替换(子结构替换)

RDKit 可以替换分子中的子结构,这在分子库改造和化合物优化中非常常用。

mol = Chem.MolFromSmiles("CCO")
query = Chem.MolFromSmiles("O")
replace = Chem.MolFromSmiles("Cl")

new_mol = Chem.ReplaceSubstructs(mol, query, replace)[0]
print(Chem.MolToSmiles(new_mol))

输出:

CCCl

小贴士

  1. 不可变分子与 RWMol:普通 Mol 不能直接修改,必须转换成 RWMol 进行编辑。
  2. SMARTS 比 SMILES 更强大:熟悉 SMARTS 能让你快速检测官能团,比如 [OX2H] 表示羟基。
  3. 子结构匹配结果是原子索引:可用于后续高亮显示或修改分子。
  4. ReplaceSubstructs 非常适合做分子改造,比如虚拟药物库的生成。

练习

  1. 写一个函数,输入 SMILES 和一个 SMARTS 模式,输出分子是否包含该子结构。

    • 测试:苯酚 (c1ccccc1O) 是否包含芳香碳-氧键 (c-O)?
  2. 用 RDKit 将乙醇 (CCO) 的 -OH 替换成 -Cl,并输出新分子的 SMILES。

  3. 检测以下分子中是否含有羧基(-COOH):

    • 乙酸 (CC(=O)O)
    • 苯甲酸 (c1ccccc1C(=O)O)
    • 乙醇 (CCO)
  4. 编写一个小程序,对分子库(SDF 文件)批量检测是否含有 芳香环,并输出含有芳香环的分子数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这是Jamon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值