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 和输入记录编号,便于追溯每个结果所用的条件和来源。

可以下载输出 CSV 示例与运行记录。先用这五个化合物核对条件,再换成自己的列表。