Извлечение CDS-последовательностей в Biopython

Всем добрый день,

Я начинаю программировать на 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'

Спасибо за помощь.

3 ответа

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

Я бы порекомендовал вам ознакомиться с документацией по Biopython для SeqIO а также SeqRecord объекты, такие как parse а также read, genbank Формат реализован в парсере, поэтому у вас не должно возникнуть проблем с чтением файла. На самом деле, вам нужно только указать genbank в качестве параметра.

Здесь у вас даже есть пример для чтения файлов 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 приписывать. Если вы хотите что-то сделать с функциями, вам нужно выполнить их итерацию для каждой записи.

У объекта seqfeature есть метод extract, который избавляет вас от необходимости копаться в FeatureLocation. Возвращает новую последовательность.

from Bio.Seq import Seq
from Bio.Alphabet import generic_protein
from Bio.SeqFeature import SeqFeature, FeatureLocation
seq = Seq("MKQHKAMIVALIVICITAVVAAL", generic_protein)
f = SeqFeature(FeatureLocation(8, 15), type="domain")
f.extract(seq)
# returns: Seq('VALIVIC', ProteinAlphabet())
Другие вопросы по тегам