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

使用Biopython SeqIO保存GenBank文件时注释信息缺失求助

解决Biopython保存GenBank文件时注释缺失及GenBank.Record保存问题

我来帮你搞定这两个问题——GenBank文件里注释消失,还有GenBank.Record对象的保存方法:

一、修复注释缺失的问题

你遇到的注释不显示问题,核心原因是Biopython的GenBank写入器只识别特定的annotations键名,不是你自定义的SOURCE/ORGANISM这类大写键。另外你的基因位置计算也有个小坑,我一起帮你修正:

关键修改点:

  1. 规范annotations键名:
    • 用source对应GenBank里的SOURCE字段
    • 用organism对应ORGANISM字段
    • 用小写的taxonomy对应分类学信息(会自动生成ORGANISM下的分类层级)
  2. 修正编码区位置:蛋白质由3碱基密码子编码,所以DNA编码区长度应该是蛋白长度×3,之前的end = start + len(protein_seq)会导致特征长度错误。
  3. 优化特征规范:如果这个是编码区,用type='CDS'更符合GenBank标准,同时用db_xref关联蛋白ID是规范做法。

修正后的完整代码:

from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.SeqFeature import SeqFeature, FeatureLocation
from Bio.Alphabet import IUPAC
from Bio import SeqIO

# 你的序列信息
genome_seq = 'ATTTTGTGCAGCCGAGAGCGCGAGCGAAGCGCTTAAAAAATTCCCCCGCTCTGTTCTCCGGCAGGACACAAAGTCATGCCGTGGAGACCGCCGGTCCATAACGTGCCAGGTAGAGAGAATCAATGGTTTGCAGCGTTCTTTCACGGTCATGCTGCTTTCTGCGGGTGTGGTGACCCTGTTGGGCATCTTAACGGAAGC'
protein_seq = 'QQRILGVKLRLLFNQVQKIQQNQDP'

# 修正编码区位置:0-based左闭右开,DNA长度=蛋白长度×3
start = 12  # 对应GenBank的第13位
end = start + len(protein_seq) * 3

# 元数据信息
name = 'my_contig'
bioproject = 'BodySites'
sample_type='blood'
# 建议用完整的分类层级,更符合GenBank规范
taxonomy = ['Eukaryota', 'Metazoa', 'Chordata', 'Craniata', 'Mammalia', 'Eutheria', 'Primates', 'Hominidae', 'Homo', 'Homo sapiens']
reference_prot_ID = 'YP_92845z2093857'

# 特征注释字典(符合GenBank规范)
feature_qualifiers = {
    'gene':'ORF1', 
    'db_xref': f'ProteinID:{reference_prot_ID}',  # 标准的蛋白ID关联方式
    'translation': protein_seq
}

# 序列注释字典(修正键名)
record_annotations = {
    'source': sample_type,
    'organism': 'Homo sapiens',
    'taxonomy': taxonomy,
    'project': bioproject  # 添加Bioproject信息到注释
}

# 创建特征和序列记录
# 如果是结构域而非编码区,把type改回'domain'即可
cds_feature = SeqFeature(FeatureLocation(start, end, strand=1), type='CDS', qualifiers=feature_qualifiers)
my_record = SeqRecord(
    Seq(genome_seq, alphabet=IUPAC.unambiguous_dna),
    id=name,
    name=name,
    description=bioproject,
    annotations=record_annotations,
    features=[cds_feature]
)

# 保存为GenBank文件
with open('/media/sf_Desktop/test.gb', 'w') as handle:
    SeqIO.write(my_record, handle, 'genbank')

# 可以打开文件验证内容
with open('/media/sf_Desktop/test.gb', 'r') as f:
    print(f.read())

运行这段代码后,你的GenBank文件里就会出现SOURCE、ORGANISM和完整的分类学信息了。

二、保存GenBank.Record对象的方法

如果你是通过Bio.GenBank.parse()解析GenBank文件得到的GenBank.Record对象,直接用SeqIO.write()就能保存,Biopython内部会自动处理格式转换,不需要额外转换为SeqRecord:

from Bio import GenBank, SeqIO

# 读取GenBank文件得到Record对象列表
with open('your_input.gb', 'r') as handle:
    genbank_records = list(GenBank.parse(handle))

# 保存第一个Record对象到新文件
with open('your_output.gb', 'w') as handle:
    SeqIO.write(genbank_records[0], handle, 'genbank')

这样就能完整保存GenBank.Record里的所有信息啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:51:33