You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用RDKit将原子索引表示的最短路径转换为mol文件?

用RDKit从原子索引路径生成新Mol文件

要将最短路径的原子索引转换为独立的Mol文件,RDKit可以通过精准指定保留的原子和键来实现,以下是两种实用方案:

方案一:精准指定原子与键生成新分子

利用rdmolops.MolFragmentToMol函数,直接传入要保留的原子和键索引,确保仅保留最短路径结构:

from rdkit import Chem
from rdkit.Chem import rdmolops

# 加载初始Mol文件
mol = Chem.MolFromMolFile("your_initial.mol")
# 最短路径的原子索引(确认是RDKit的0基索引)
path_atoms = (39, 18, 21, 43, 25)

# 收集路径中相邻原子的键索引
bond_indices = []
for i in range(len(path_atoms)-1):
    atom1 = path_atoms[i]
    atom2 = path_atoms[i+1]
    bond = mol.GetBondBetweenAtoms(atom1, atom2)
    if bond:
        bond_indices.append(bond.GetIdx())

# 生成仅含路径的新分子
new_mol = rdmolops.MolFragmentToMol(
    mol,
    atomIndices=list(path_atoms),
    bondIndices=bond_indices
)

# 保存为新Mol文件
Chem.MolToMolFile(new_mol, "shortest_path.mol")

方案二:删除路径外原子生成新分子

通过删除非路径原子的方式简化操作,注意要反向排序删除索引避免索引偏移:

from rdkit import Chem
from rdkit.Chem import rdmolops

mol = Chem.MolFromMolFile("your_initial.mol")
path_atoms = (39, 18, 21, 43, 25)

# 筛选出需要删除的原子索引,反向排序
atoms_to_delete = [i for i in range(mol.GetNumAtoms()) if i not in path_atoms]
atoms_to_delete.sort(reverse=True)

# 创建原分子副本并删除指定原子
new_mol = Chem.Mol(mol)
for idx in atoms_to_delete:
    rdmolops.RemoveAtom(new_mol, idx)

# 保存结果
Chem.MolToMolFile(new_mol, "shortest_path_alt.mol")

注意事项

  • 确认原子索引为RDKit的0基索引:若原始工具输出是1基索引,需先对每个索引减1转换。
  • 两种方案对比:方案一适合需要严格控制保留键的场景,方案二更简洁,适用于路径原子间均为直接相连的情况。

内容的提问来源于stack exchange,提问作者meadeytabeedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:20:43