python:openbabel 化学信息学实用工具库
·
Python 版本的 Open Babel 库,这是一个在 cheminformatics( 化学信息学)领域经常实用的工具库,我会从基础概念、核心功能、使用方法等方面为你详细介绍。
一、Open Babel 核心介绍
Open Babel 是一个免费、开源的 cheminformatics 工具库,而 openbabel-python(也常用 pybel 模块)是它的 Python 绑定版本,核心作用是处理化学分子结构数据:
- 定位:解决不同化学文件格式(如 SMILES、SDF、PDB、Mol2 等)之间的转换,以及分子结构的计算、分析、可视化等问题。
- 适用场景:药物研发、分子模拟、化学数据分析等领域,是 cheminformatics 领域的基础工具之一。
- 核心优势:支持 100+ 种化学文件格式,内置丰富的分子属性计算函数,轻量且易于集成到 Python 工作流中。
二、安装方法
首先需要安装 Open Babel 本体和 Python 绑定,推荐通过 conda 安装(兼容性最好):
推荐:使用 conda 安装(支持 Windows/macOS/Linux)
conda install -c conda-forge openbabel
备选:pip 安装(部分系统可能需要先安装系统级 Open Babel)
pip install openbabel
openbabel-3.1.1.1.tar.gz (82 kB)
三、核心功能与示例代码
1. 分子格式转换(最常用功能)
将一种分子格式(如 SMILES)转换为另一种(如 SDF、PDB):
from openbabel import pybel
# 1. 从 SMILES 字符串创建分子
# SMILES:简化分子线性输入规范,是表示分子结构的文本格式
mol = pybel.readstring("smi", "C1=CC=CC=C1") # 苯的 SMILES
# 2. 转换为 SDF 格式并保存
mol.write("sdf", "benzene.sdf", overwrite=True)
# 3. 转换为 PDB 格式并保存
mol.write("pdb", "benzene.pdb", overwrite=True)
# 4. 批量转换文件(如把文件夹下所有 SDF 文件转 Mol2)
for mol in pybel.readfile("sdf", "input.sdf"):
mol.write("mol2", "output.mol2", overwrite=True)
2. 计算分子属性
Open Babel 内置了大量分子属性计算函数,如分子量、脂水分配系数(logP)、氢键供体/受体数等:
from openbabel import pybel
# 创建分子(以乙醇为例)
mol = pybel.readstring("smi", "C2H5OH")
# 给分子添加氢原子(计算属性前建议执行)
mol.OBMol.AddHydrogens()
# 计算核心属性
print("分子量:", mol.molwt) # 输出:46.06844
print("logP 值:", mol.calcdesc(["logP"])[0]) # 脂水分配系数
print("氢键供体数:", mol.OBMol.NumHDonors()) # 输出:1
print("氢键受体数:", mol.OBMol.NumHAcceptors()) # 输出:1
print("重原子数:", mol.OBMol.NumHeavyAtoms()) # 输出:3
# 计算更多描述符(可通过 pybel.descs 获取所有支持的描述符)
desc = mol.calcdesc(["TPSA", "MR", "refractivity"]) # 拓扑极性表面积、摩尔折射率等
print("拓扑极性表面积 (TPSA):", desc[0])
3. 分子结构操作
如旋转、平移、添加氢原子、生成 3D 构象等:
from openbabel import pybel, openbabel
# 创建分子(以甲烷为例)
mol = pybel.readstring("smi", "CH4")
mol.OBMol.AddHydrogens()
# 生成 3D 构象(使用内置力场)
ff = pybel._forcefields["mmff94"] # 选择力场(mmff94/uff 等)
ff.Setup(mol.OBMol)
ff.ConjugateGradients(1000) # 优化构象(1000 步共轭梯度)
ff.UpdateCoordinates(mol.OBMol) # 更新分子坐标
# 旋转分子(绕 X 轴旋转 90 度)
mol.OBMol.Rotate(openbabel.vector3(1, 0, 0), 90)
# 保存带 3D 坐标的分子
mol.write("xyz", "methane_3d.xyz", overwrite=True)
4. 分子可视化(结合 py3Dmol)
Open Babel 本身不直接可视化,但可结合 py3Dmol 快速展示分子:
import py3Dmol
from openbabel import pybel
# 创建分子并生成 3D 构象
mol = pybel.readstring("smi", "C1=CC=CC=C1")
mol.OBMol.AddHydrogens()
ff = pybel._forcefields["mmff94"]
ff.Setup(mol.OBMol)
ff.ConjugateGradients()
ff.UpdateCoordinates(mol.OBMol)
# 转换为 PDB 格式字符串,用于可视化
pdb_str = mol.write("pdb")
# 用 py3Dmol 展示
view = py3Dmol.view(width=400, height=400)
view.addModel(pdb_str, "pdb")
view.setStyle({"stick": {}}) # 棒状样式
view.zoomTo()
view.show()
四、关键注意事项
- 氢原子处理:计算分子属性或生成 3D 构象前,务必执行
mol.OBMol.AddHydrogens(),否则会导致属性计算错误。 - 格式支持:可通过
pybel.informats/pybel.outformats查看所有支持的输入/输出格式(如smi、sdf、pdb、mol2、xyz等)。 - 力场选择:生成 3D 构象时,常用力场有
mmff94(适用于有机小分子)、uff(通用力场),根据分子类型选择。
总结
- Open Babel-Python 是处理化学分子数据的核心库,主打格式转换和分子属性计算,适配 cheminformatics 各类场景;
- 核心模块是
pybel,常用操作包括分子创建、格式转换、属性计算、3D 构象生成; - 使用前需确保安装正确(优先 conda),计算属性前记得添加氢原子,避免结果错误。
更多推荐



所有评论(0)