You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Biopython Entrez efetch从gene数据库获取人类基因Genbank文件

解决方法

完全不用手动拆分注释文本,Biopython内置的结构化解析工具就能直接拿到坐标,还能自动解析Genbank文件的注释、CDS、外显子内含子结构信息,优化后的代码如下:

from Bio import Entrez
from Bio import SeqIO

# 配置Entrez邮箱
Entrez.email = "myemail@gmail.com"
# 搜索人类P53基因,retmax设为1直接拿最匹配的结果
search_handle = Entrez.esearch(db="gene", retmax=1, term="P53 AND Homo sapiens[organism]")
search_record = Entrez.read(search_handle)
gene_id = search_record["IdList"][0]

# 以XML格式获取基因结构化信息,无需手动拆分文本
gene_fetch_handle = Entrez.efetch(db="gene", id=gene_id, rettype="gb", retmode="xml")
gene_record = Entrez.read(gene_fetch_handle)[0]
# 直接提取染色体编号、起始、终止坐标
chrom_accession = gene_record['Entrezgene_locus'][0]['Gene-commentary_accession']
start = gene_record['Entrezgene_locus'][0]['Gene-commentary_seqs'][0]['Seq-loc_int']['Seq-interval']['Seq-interval_from']
end = gene_record['Entrezgene_locus'][0]['Gene-commentary_seqs'][0]['Seq-loc_int']['Seq-interval']['Seq-interval_to']
# NCBI返回的起始坐标为0-based,转为和注释一致的1-based
start = str(int(start) + 1)
end = str(end)

# 直接获取带完整注释的Genbank记录,用SeqIO直接解析
gb_handle = Entrez.efetch(db="nuccore", id=chrom_accession, start=start, end=end, rettype="gbwithparts", retmode="text")
gb_record = SeqIO.read(gb_handle, "genbank")

# 可直接提取所需信息
print(f"染色体编号: {chrom_accession}")
print(f"基因起始位点: {start}")
print(f"基因终止位点: {end}")
print(f"序列长度: {len(gb_record)}")
# 遍历特征即可获取CDS、外显子、内含子信息
for feature in gb_record.features:
    if feature.type == "CDS":
        print("CDS坐标:", feature.location)
    if feature.type == "exon":
        print("外显子坐标:", feature.location)

代码说明

  • 直接用xml格式读取gene库的返回结果,不会因为NCBI调整注释行顺序出现解析错误,稳定性远高于手动拆分文本
  • 调用efetch获取核酸序列时指定rettype="gbwithparts",即可拿到带完整CDS、内含子、外显子注释的Genbank格式数据
  • 用SeqIO.read直接解析返回的句柄,所有注释信息都结构化存储在gb_record.features中,直接遍历提取即可

内容的提问来源于stack exchange,提问作者harijay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:24:05