AttributeError: у объекта 'list' нет атрибута 'SeqRecord' - при попытке нарезать несколько последовательностей с помощью Bio python> SeqIO из файла fasta - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь создать фрагменты переменной длины N и C termini (1,2,3,4,5,6,7). Но перед тем, как попасть туда, у меня проблемы с чтением в моих файлах фаста. Я следовал главному учебнику «Случайные подпоследовательности» из: https://biopython.org/wiki/SeqIO. Но в этом случае есть только одна последовательность, так что, возможно, именно здесь я ошибся. Код с примерами последовательностей и моими ошибками. Любая помощь приветствуется. Я явно вне моей глубины. Похоже, есть много подобных проблем, с которыми сталкивались другие, поэтому я представляю, что делаю что-то глупое, потому что не до конца понимаю структуры SeqRecord. Спасибо!

Два примера последовательности в моем файле domains.fasta:

>GA98
TTYKLILNLKQAKEEAIKELVDAGTAEKYFKLIANAKTVEGVWTLKDEIKTFTVTE
>GB98
TTYKLILNLKQAKEEAIKELVDAGTAEKYFKLIANAKTVEGVWTYKDEIKTFTVTE

мой код, который не работает:

from Bio import SeqIO
from Bio.SeqRecord import SeqRecord


# Load data:
domains = list(SeqIO.parse("domains.fa",'fasta'))

#set up receiving arrays
home=[]
num=1

#slice data
for i in range(0, 6):
    num = num+1
    domain = domains
    seq_n = domains.seq[0:num]
    seq_c = domains.seq[len(domain)-num:len(domain)]
    name = domains.id
    record_d = SeqRecord(domain,'%s' % (name), '', '')
    home.append(record_d)
    record_n = SeqRecord(seq_n,'%s_n_%i' % (name,num), '', '')
    home.append(record_n)
    record_c = SeqRecord(seq_c,'%s_c_%i' % (name,num), '', '')
    home.append(record_c)
SeqIO.write(home, "domains_variants.fasta", "fasta")

Я получаю ошибку:

Traceback (most recent call last):
  File "~/fasta_nc_sequences.py", line 20, in <module>
    seq_n = domains.seq[0:num]
AttributeError: 'list' object has no attribute 'SeqRecord'

Когда я распечатываю 'domains = list (SeqIO.parse ("domains.fa",' fasta '))', я получаю это:

[SeqRecord(seq=Seq('TTYKLILNLKQAKEEAIKELVDAGTAEKYFKLIANAKTVEGVWTLKDEIKTFTVTE', SingleLetterAlphabet()), id='GA98', name='GA98', description='GA98', dbxrefs=[]), SeqRecord(seq=Seq('TTYKLILNLKQAKEEAIKELVDAGTAEKYFKLIANAKTVEGVWTYKDEIKTFTVTE', SingleLetterAlphabet()), id='GB98', name='GB98', description='GB98', dbxrefs=[])]

Я не уверен почему Я не могу получить доступ к тому, что находится в SeqRecord. Может быть, это потому, что я обернул SeqIO.parse в список, потому что перед тем, как мне выдавали другую ошибку:

AttributeError: 'generator' object has no attribute 'seq'

1 Ответ

1 голос
/ 10 февраля 2020

Я работал на один уровень ниже моего для l oop, поэтому я не перебирал последовательности. Также были проблемы с доступом к конечной последовательности C. Теперь код работает.

#Load data:
domains = list(SeqIO.parse("examples/data/domains.fa",'fasta'))
#set up receiving arrays

home=[]
#num=1
#subset data
for record in (domains):
    num = 0
    domain = record.seq
    name = record.id
    record_d = SeqRecord(domain,'%s' % (name), '', '')
    home.append(record_d)
    for i in range(0, 6):
        num= num+1
        seq_n = record.seq[0:num]
        seq_c = record.seq[len(record.seq)-num:len(record.seq)]
        record_n = SeqRecord(seq_n,'%s_n_%i' % (name,num), '', '')
        home.append(record_n)
        record_c = SeqRecord(seq_c,'%s_c_%i' % (name,num), '', '')
        home.append(record_c)
SeqIO.write(home, "domains_variants.fasta", "fasta")
...