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

如何在Python脚本中仅用GenBank登录号下载GenBank序列文件

问题解答

核心结论

  • NCBI EUtilities接口原生支持两类ID作为查询入参:数字形式的GI号、带版本号的GenBank登录号,使用Bio::DB::EUtilities时无需提前将登录号转换为数字ID,可直接传入。
  • 直接传入AF405666.1获取单条GenBank文件的方式完全可行,仅需要注意匹配对应序列数据库即可。

关键注意点

  • 你提供的示例代码中-db参数设置为protein(蛋白数据库),而AF405666.1属于核酸序列,需要将该参数修改为-db => 'nucleotide'才能正常返回结果。
  • 单条序列传入时既可以直接传标量值,也可以存入数组后传数组引用,和批量传入ID的逻辑完全一致。
  • 无论使用Perl的Bio::DB::EUtilities还是Python端的BioPython Entrez模块,都支持直接传入GenBank登录号,不需要额外做ID转换步骤。

参考代码

Perl 单序列下载实现

my $acc = 'AF405666.1';
my $factory = Bio::DB::EUtilities->new(-eutil   => 'efetch',
                                       -db      => 'nucleotide',
                                       -rettype => 'gb',
                                       -email   => 'mymail@foo.bar',
                                       -id      => $acc);
# 将返回的序列文件写入本地
$factory->get_Response(-file => 'AF405666.1.gb');

Python 单序列下载实现(适配Python脚本场景)

from Bio import Entrez

# 必须填写真实邮箱,NCBI会通过邮箱联系访问异常的用户
Entrez.email = "mymail@foo.bar"
acc = "AF405666.1"
handle = Entrez.efetch(db="nucleotide", id=acc, rettype="gb", retmode="text")
# 保存为本地gb格式文件
with open(f"{acc}.gb", "w", encoding="utf-8") as out_f:
    out_f.write(handle.read())
handle.close()

批量下载场景下,只需要将多个登录号存入列表传入id参数即可,用法和传入数字GI号完全一致,不需要特殊处理。注意控制请求频率,避免被NCBI封禁访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:57:17