如何通过Python调用UniProt API从氨基酸序列获取UniProt accession?
根据氨基酸序列获取UniProt Accession的Python实现方案
可行性说明
完全可行,UniProt官方REST API支持通过氨基酸序列匹配来查询对应的UniProt Accession。
具体实现步骤
1. 接口参数说明
使用UniProt的搜索接口https://rest.uniprot.org/uniprotkb/search,通过query参数指定序列匹配规则,格式为sequence:"<氨基酸序列>",同时指定format=json便于Python解析返回结果。
2. Python代码示例
import requests def fetch_uniprot_accessions(aa_sequence): api_url = "https://rest.uniprot.org/uniprotkb/search" request_params = { "query": f'sequence:"{aa_sequence}"', "format": "json", "size": 10 # 控制返回结果数量,按需调整 } response = requests.get(api_url, params=request_params) if response.ok: result_data = response.json() # 提取所有匹配条目的主Accession accessions = [entry["primaryAccession"] for entry in result_data.get("results", [])] return accessions else: print(f"请求失败:状态码 {response.status_code}") return None # 调用示例 target_sequence = "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN" matched_accessions = fetch_uniprot_accessions(target_sequence) if matched_accessions: print("匹配到的UniProt Accession:", matched_accessions) else: print("未找到匹配的Accession")
- 注意事项:序列需无多余字符(空格、换行等);若需模糊匹配,可将查询规则改为
sequence:~"<序列>",但UniProt要求模糊匹配的序列长度至少30个氨基酸;如果序列存在多个匹配条目,会返回所有符合条件的Accession。
替代方案
如果直接调用UniProt API无法满足需求(如序列过短、匹配精度不足),可尝试以下方案:
- BLAST序列比对:使用Biopython库调用NCBI BLAST服务,指定比对UniProt数据库,解析比对结果提取Accession。示例代码需依赖
biopython库,通过NCBIWWW.qblast方法提交序列搜索。 - 本地数据库匹配:下载UniProtKB/Swiss-Prot数据库文件,使用本地BLAST工具(如
blastp)进行序列比对,适合批量处理大量序列的场景,避免频繁API调用限制。 - EMBL-EBI序列搜索API:调用EMBL-EBI的UniProt序列相似性搜索接口,提交序列后获取匹配的Accession,该接口支持更灵活的比对参数设置。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

