把电子表格中的结构交给其他分子软件时,可以用 SDF 将结构与化合物 ID 一起保存。本文把 SMILES CSV 转为 SDF,并为每条记录保留 ID、名称、原始 SMILES 和输入记录编号。
一则将 Excel 中的 SMILES 列转换为分子文件的公开提问,起因是后续软件不接受 Excel 文件。修改扩展名并不会把 CSV 表格转换成 SDF 记录;需要读取结构,再按目标格式写出。
准备输入
将 compounds.csv 和 csv_to_sdf.py 放到同一文件夹。
source_id,name,smiles
CMP001,acetic acid,CC(=O)O
CMP002,ethanol,CCO
CMP003,aspirin,CC(=O)Oc1ccccc1C(=O)O
样例包含五个化合物。使用自己的表格时,将结构放在 smiles 列,管理用 ID 放在 source_id 列。请为每条记录填写非空且唯一的 ID,便于之后将结构与实验数据或计算结果关联。
写出 SDF
在终端打开 CSV 和脚本所在的文件夹。macOS 或 Linux 用户可执行:
python3 -m venv .venv
.venv/bin/python -m pip install "chematic==1.1.2"
.venv/bin/python csv_to_sdf.py compounds.csv
请在已安装 Python 的环境中执行;本例在 macOS arm64 上使用 Python 3.13.6 核对。Windows 用户将第一行改为 py -m venv .venv,并将 .venv/bin/python 替换为 .\.venv\Scripts\python.exe。安装软件包后,转换在本机进行。输出包括 compounds.sdf 和记录每个输入行的 sdf-export-report.csv。
脚本用 SDWriter 保存结构,并生成用于显示的二维坐标。每条记录的标题行使用化合物 ID,同时写入以下 SDF 属性:
compound_id:原始管理 IDcompound_name:原始名称source_smiles:输入中的原始 SMILESsource_row:输入记录编号,表头之后从 2 开始engine_version:转换所用的 chematic 版本
输出中的坐标是二维坐标。需要三维结构的计算化学任务,可在此之后选择相应的坐标生成和优化步骤。
读回并核对 ID
在把 SDF 交给下一个软件前,先读回保存的 ID。将以下代码保存为同一文件夹中的 check_sdf.py:
import chematic
for mol in chematic.SDMolSupplier("compounds.sdf"):
print(mol.GetProp("compound_id"), mol.formula, mol.GetProp("source_smiles"))
.venv/bin/python check_sdf.py
用公开发布的 chematic Python 包 v1.1.2 核对得到的结果如下:
CMP001 C2H4O2 CC(=O)O
CMP002 C2H6O CCO
CMP003 C9H8O4 CC(=O)Oc1ccccc1C(=O)O
CMP004 C4H8O2 CCOC(C)=O
CMP005 C2H3NaO2 CC(=O)[O-].[Na+]
五个 ID 及其原始 SMILES 均已读回核对。统计处理记录中 status=written 的行数,可以将导出记录数与输入进行对照。如果软件支持在结构旁显示属性,可选择 compound_id,以便与原表关联。
可以下载输出 SDF、导出记录 CSV以及运行记录。所用 API 的实现可查看 Python 格式读写代码。