使用ChemSpiPy获取Phenolics列表化合物Canonical SMILES失败求助
化合物SMILES查询问题解决方法
问题根源
你的代码无法返回结果的核心原因有两个:
- 直接将整个列表对象传入
cs.search(),但ChemSpiPy的search()方法仅接收单个字符串作为查询参数,不能直接处理列表。 - 化合物名称存在格式错误(比如多余空格、下标符号误用,如
30应为3'、40应为4',还有7- methylether中间的空格),这些问题会导致搜索匹配失败。
修正后的实现步骤与代码
1. 整理规范化的化合物名称列表
先修正名称中的格式问题,生成干净的查询列表:
phenolics = [ "Dihydroquercetin 7,3'-dimethyl ether", "Artelin", "Esculin 7-methylether (methylesculin)", "Esculin", "Scopoletin (7-hydroxy-6-methoxycoumarin)", "Axillarin", "Esculetin", "Isoscopoletin", "6-Beta-D-glucosyl-7-methoxycoumarin", "5,4'-Dihydroxy-3,6,7,3'-tetramethoxyflavone", "Apigenin", "Luteolin-7-O-glucoside", "Magnoloside", "Penduletin", "Quercetagetin", "Quercetagetin-3,6,7-trimethyl ether", "Quercetin", "Quercetin 7,3'-dimethyl ether (Rhamnazine)", "Scoparone", "Skimmin", "Umbelliferone", "Apigenin 4'-methyl ether" ]
2. 完整的ChemSpiPy查询代码
先完成API初始化(需要你自己的ChemSpider API密钥,可通过ChemSpider账号获取),再逐个查询每个化合物:
from chemspipy import ChemSpider # 替换为你的ChemSpider API密钥 cs = ChemSpider('你的API密钥') for name in phenolics: try: # 搜索化合物,取第一个最匹配的结果 results = cs.search(name) if results: compound = results[0] print(f"{name}: {compound.smiles}") else: print(f"{name}: 未找到匹配化合物") except Exception as e: print(f"{name}: 查询出错 - {str(e)}")
关键注意事项
- API密钥:必须注册ChemSpider账号获取API密钥,否则无法发起查询请求。
- 名称规范化:尽量使用无多余空格、下标符号正确的标准名称,括号内的别名可保留,但要确保格式整洁。
- 结果筛选:
cs.search()可能返回多个匹配结果,代码中默认取第一个最相关的,你也可以根据分子式、CAS号等信息进一步筛选更准确的结果。
内容的提问来源于stack exchange,提问作者Celin Younan
相关产品推荐
相关产品推荐

