You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python下载NCBI序列集并提取源特征列表?

实用工具方案:提取NCBI序列集的源特征列表

我来给你梳理几个靠谱的工具,帮你搞定从NCBI的100条序列集里提取ID/country/collection_date特征的需求——不管你偏好命令行、编程还是网页操作,都有对应的解决方案:

1. NCBI Entrez Direct (EDirect) - 官方命令行工具

这是NCBI官方推出的命令行工具集,批量处理序列数据非常高效,适合熟悉终端操作的用户。

操作步骤:

  1. 先安装EDirect(按照NCBI官方指引配置即可,无需额外复杂依赖)
  2. 把你的100条序列ID整理成一个文本文件(比如accessions.txt,每行一个ID)
  3. 运行以下命令,直接提取并输出你要的格式:
# 先打印表头,再批量提取特征
echo -e "ID\t/country\t/collection_date" && cat accessions.txt | efetch -db nuccore -format gb | xtract -pattern GBSeq -element GBSeq_accession-version -block GBFeature -if GBFeature_key -equals source -element GBQualifier_value -filter GBQualifier_name -equals country -filter GBQualifier_name -equals collection_date | awk '{print NR "\t" $1 "\t" $2}'

这个命令会自动下载GenBank格式的序列,然后精准提取source特征里的国家和采集日期,最后按你要的编号格式输出。

2. Biopython - 可编程的自定义方案

如果你有Python基础,用Biopython可以更灵活地处理数据(比如处理缺失字段、自定义输出格式)。

示例脚本:

from Bio import Entrez, SeqIO

# 必须填写你的邮箱,NCBI要求用于追踪访问,避免被限制
Entrez.email = "your_email@example.com"

# 读取序列ID列表(假设ID存在accessions.txt中)
with open("accessions.txt", "r") as f:
    accessions = [line.strip() for line in f if line.strip()]

# 批量获取GenBank格式的序列记录
handle = Entrez.efetch(db="nuccore", id=accessions, rettype="gb", retmode="text")
records = SeqIO.parse(handle, "genbank")

# 输出结果
print("ID\t/country\t/collection_date")
for idx, record in enumerate(records, 1):
    country = "N/A"
    collection_date = "N/A"
    # 遍历特征,找到source类型的字段
    for feature in record.features:
        if feature.type == "source":
            country = feature.qualifiers.get("country", [country])[0]
            collection_date = feature.qualifiers.get("collection_date", [collection_date])[0]
            break
    print(f"{idx}\t{country}\t{collection_date}")

运行这个脚本后,会自动处理缺失字段(用N/A填充),输出符合你要求的表格格式。

3. Batch Entrez + 文本处理工具 - 网页+轻量脚本方案

如果你不想用命令行或编程,先通过NCBI的网页工具下载序列,再用简单的文本脚本提取特征:

操作步骤:

  1. 打开NCBI的Batch Entrez工具,粘贴你的100条序列ID,选择数据库(比如nuccore
  2. 选择输出格式为GenBank(完整格式),下载合并后的GenBank文件
  3. awk脚本提取特征(无需编程基础,复制脚本运行即可):
BEGIN { 
    print "ID\t/country\t/collection_date"
    idx = 1
    country = "N/A"
    date = "N/A"
}
/LOCUS/ { current_id = $2 }
/\/country=/ { 
    gsub(/"/, "", $0)
    country = substr($0, 11)
}
/\/collection_date=/ { 
    gsub(/"/, "", $0)
    date = substr($0, 20)
}
/ORIGIN/ { 
    print idx "\t" country "\t" date
    idx++
    country = "N/A"
    date = "N/A"
}

把脚本保存为extract_features.awk,然后运行:

awk -f extract_features.awk your_downloaded_genbank.gb

小提示:

  • 用EDirect或Biopython时,一定要填写邮箱,NCBI会限制无标识的频繁访问
  • 部分序列可能缺失countrycollection_date字段,上述方案都做了缺失值处理,你可以根据需求调整填充内容

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

火山引擎 最新活动