AttributeError:“list”对象在尝试使用Biopython>SeqIO从fasta文件切片多个序列时没有属性“SeqRecord”

2024-10-03 19:20:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图生成不同长度的N和C端切片(1,2,3,4,5,6,7)。但是在我到达那里之前,我在读取我的fasta文件时遇到了问题。我是从:https://biopython.org/wiki/SeqIO开始学习“随机子序列”的头教程的。但在这种情况下,只有一个序列,所以可能这就是我出错的地方。包含示例序列和我的错误的代码。任何帮助都将不胜感激。我显然是力不从心。看起来其他人也遇到了很多类似的问题,所以我认为我在做一些愚蠢的事情,因为我没有完全理解SeqRecord结构。谢谢

my file 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'

Tags: namehomedomain错误序列seqrecordrecordnum
1条回答
网友
1楼 · 发布于 2024-10-03 19:20:34

我在for循环中工作的级别太低,所以我没有遍历序列。访问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")

相关问题 更多 >