SMARTS 可以用来筛选含有指定分子片段的结构。本文分别搜索 CSV 中的 C(=O)OH 和 C(=O)O⁻,再将匹配结果与原始化合物 ID 一起写入文件。
一则从 SMILES 列表分析子结构的公开提问展示了这类任务:先明确要寻找的部位,再把同一条件应用到整份结构列表。
确定要搜索的片段
参照 Daylight 官方 SMARTS 示例,这里使用两个查询式:
COOH: [CX3](=O)[OX2H1]
COO⁻: [CX3](=O)[O-]
第一个查询寻找与羰基碳相连、带有一个氢的氧原子。第二个查询寻找该位置带负电荷的氧原子。输出中的 acid_match 和 anion_match 分别以 1 表示匹配、0 表示不匹配。若同一结构含有两种片段,两列都记为 1。
筛选范围由这两个具体的子结构决定。含有相同片段的氨基甲酸或碳酸衍生物也可能匹配。请结合研究采用的分类定义和相邻原子的条件,检查选中的结构。
搜索 CSV 中的每个结构
将 compounds.csv 和 carboxyl_csv.py 保存到同一文件夹。输入中的 source_id 是化合物 ID,smiles 是待搜索的结构。
在终端打开该文件夹。macOS 或 Linux 用户可执行:
python3 -m venv .venv
.venv/bin/python -m pip install "chematic==1.1.2"
.venv/bin/python carboxyl_csv.py compounds.csv
请在已安装 Python 的环境中执行;本例在 macOS arm64 上使用 Python 3.13.6 核对。Windows 用户将第一行改为 py -m venv .venv,并将 .venv/bin/python 替换为 .\.venv\Scripts\python.exe。安装软件包后,CSV 读取和结构搜索都在本机进行。
脚本直接搜索输入的 SMILES。如果工作流程要求先去盐或调整电荷,请先确定标准化设置,并将设置与搜索结果一同保存。
筛选匹配的行
以下结果已用公开发布的 chematic Python 包 v1.1.2 核对:
source_id name acid_match anion_match
CMP001 acetic acid 1 0
CMP002 ethanol 0 0
CMP003 aspirin 1 0
CMP004 ethyl acetate 0 0
CMP005 sodium acetate 0 1
乙酸和阿司匹林匹配 COOH 查询;乙酸钠匹配 COO⁻ 查询。乙酸乙酯属于酯,两项均为 0。
用电子表格打开生成的 carboxyl-report.csv,按 acid_match=1 或 anion_match=1 筛选。status=ok 标记已完成处理的行。文件还保留查询式、原始 SMILES 和输入记录编号,便于追溯每个结果所用的条件和来源。