属性错误:'list'对象没有属性'SeqRecord' - 尝试使用 Biopython>SeqIO 从 fasta 文件切片多个序列



我正在尝试生成不同长度的N和C末端切片(1,2,3,4,5,6,7(。但是在我到达那里之前,我在阅读我的 fasta 文件时遇到了问题。我正在关注来自:https://biopython.org/wiki/SeqIO 的"随机子序列"头教程。但在这种情况下,只有一个序列,所以也许这就是我出错的地方。带有示例序列和我的错误的代码。任何帮助将不胜感激。我显然超出了我的深度。看起来其他人遇到了很多类似的问题,所以我想我正在做的事情是愚蠢的,因为我不完全理解 SeqRecord 结构。谢谢!

我的文件域中的两个示例序列.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'

我在 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")

最新更新