按任务学习

在 SMILES CSV 中标记重复结构候选

保留每个源行,在旁边写入 chematic 的规范 SMILES,并且无需将文件发送到服务器即可标记重复候选。

完成内容

一份保留源行的 CSV 报告,其中包含原始 SMILES、本地规范形式,以及明确的 unique、duplicate 或 invalid 状态。

步骤

  1. 创建带有 smiles 表头和若干输入行的 molecules.csv。
  2. 安装 chematic 后运行下面仅使用标准库的 Python 脚本。
  3. 在删除或合并任何行之前检查 molecule-report.csv。
import csv
import chematic

seen = {}
with open("molecules.csv", newline="") as src, open("molecule-report.csv", "w", newline="") as out:
    reader = csv.DictReader(src)
    fields = ["source_row", "smiles", "canonical_smiles", "status"]
    writer = csv.DictWriter(out, fieldnames=fields)
    writer.writeheader()
    for source_row, row in enumerate(reader, start=2):
        smiles = row["smiles"].strip()
        try:
            canonical = chematic.from_smiles(smiles).smiles
            status = f"duplicate_of_row_{seen[canonical]}" if canonical in seen else "unique"
            seen.setdefault(canonical, source_row)
        except ValueError:
            canonical, status = "", "invalid_smiles"
        writer.writerow({"source_row": source_row, "smiles": smiles,
                         "canonical_smiles": canonical, "status": status})

预期结果

将 CCO 和 OCC 放在不同的行时,两行的 canonical_smiles 都是 C(C)O;后一个行会标记为 duplicate_of_row_2。无效 SMILES 也会作为 invalid_smiles 保留在报告中。

遇到问题时

相同的规范 SMILES 只是重复复核候选,并不能证明记录有相同的盐形式、立体化学、来源或预期身份。请保留原始行和软件包版本,并在删除数据前验证标准化策略。

下一步

阅读 Python 工作流指南