大家好日子,
我开始在Biopython中编程,我想知道如何从具有所有特征坐标的基因组GenBank文件(* .gb)中提取基因序列和蛋白质标识符。
我的想法是创建一个包含蛋白质标识符,基因坐标和基因序列的文本文件。
如果您有任何想法,我会非常感激他们。
到目前为止我试过这个:
for seq_record in seq_record.features:
if seq_record.type == 'CDS':
x=seq_record.qualifiers['protein_id']
i=seq_record.location._start.position
f=seq_record.location._end.position
sq = seq_record.seq
FEAT_LIST.append('START END STRAND ID')
FEAT_LIST.append(str(((i, f), s, x, sq)))
print(FEAT_LIST)
但是,我收到此错误:sq = seq_record.seq AttributeError:'SeqFeature'对象没有属性'seq'
感谢您的帮助。
答案 0 :(得分:4)
FeatureLocation有一个很好的extract
方法,它接受父序列并为你提供一个新的SeqRecord对象。在该对象上,您可以使用通常的.seq
来获取序列:
from Bio import SeqIO
for rec in SeqIO.parse("sequence.gb", "genbank"):
if rec.features:
for feature in rec.features:
if feature.type == "CDS":
print feature.location
print feature.qualifiers["protein_id"]
print feature.location.extract(rec).seq
答案 1 :(得分:1)
我建议您查看SeqIO
和SeqRecord
个对象的Biopython文档,例如parse
和read
。 genbank
格式在解析器中实现,因此您不应该有任何问题来读取文件。实际上,您只需将genbank
指定为参数。
Here你甚至有一个阅读genbank文件的例子。
编辑:所以我认为在迭代记录时遇到问题。我看到的问题是SeqRecord
个对象和SeqFeature
个对象之间存在混淆。你做不到:
for seq_record in seq_record.features:
因为seq_record
是SeqFeature
个对象,不是SeqRecord
个对象。首次解析GenBank文件时,您将遍历SeqRecord
个对象:
for record in SeqIO.parse('my_file.gbk','genbank'):
print "Record %s has %i features and sequence: %s" % (record.id, len(record.features), record.seq)
每个SeqRecord
对象都有seq
属性和SeqFeature
属性中features
个对象的列表。如果您想对这些功能执行某些操作,则需要为每条记录迭代它们。
答案 2 :(得分:0)
seqfeature对象有一个extract method,可以省去深入了解FeatureLocation的麻烦。它返回一个新序列。
data.table