我正在尝试打开和读取fasta文件,并且仅使用输入中的第一行。当前,我正在调用第一行并将其附加到列表中,以在以后的函数中使用。但是,我收到一个错误,指出生成器对象不可下标。
def unam_base_plot(in_file, out_file):
unam_rna = SeqIO.parse(in_file, 'fasta')
rna_x = []
for rna in unam_rna:
rna_x = unam_rna[0:][0]
rna_x.append(SeqRecord(rna_x, id = seq_rna.id))
SeqIO.write(rna_x, out_file, 'fasta')
以下是fasta文件的外观:
>seq_000
RSKKCMWRMRRAACKRWUSRSWSK
>seq_001
GCAGAAUGAAUCGAUGGCGCCUGU
>seq_002
UACGGGAUCACCUAGGCACGUUUC
>seq_003
GAAAGGAGACAAGAGGGUAGCCUU
我希望它从seq_000返回序列。
答案 0 :(得分:0)
您的问题和代码对于您想要的内容感到困惑-您似乎希望将输出输出到文件中,但也希望输出到列表中,以便在以后的功能中使用。我在代码中看到的主要问题是rna_x
似乎是两个同名的不同变量!但是还有其他问题。让我们来看一些示例:
解析输入的FASTA文件,仅从输入文件的第一个序列生成输出的FASTA文件:
def unam_base_plot(in_file, out_file):
for record in SeqIO.parse(in_file, 'fasta'):
SeqIO.write(record, out_file, 'fasta')
break # we only want the first one!
相对于示例输入,此例程的输出将是一个包含以下内容的文件:
>seq_000
RSKKCMWRMRRAACKRWUSRSWSK
如果我们只想输出输出中的序列数据,而不是FASTA标头,则可以更改以下行:
SeqIO.write(record, out_file, 'fasta')
改为:
with open(out_file, 'w') as output:
print(record.seq, file=output)
由于我们不再创建FASTA文件,而只是创建文本。如果相反,我们不想将输出写入文件,而是将FASTA文件中的第一个序列存储到全局列表中:
rna_x = []
def unam_base_plot(in_file):
for record in SeqIO.parse(in_file, 'fasta'):
rna_x.append(record.seq)
break # we only want the first one!
在您的示例输入中,我们的全局列表rna_x
现在将包含一项:
[Seq('RSKKCMWRMRRAACKRWUSRSWSK', SingleLetterAlphabet())]
在调用之后,但如果在更多输入文件上调用该函数,最终将包含其他字符。如果我们只想在全局列表中使用原始序列,而不是BioPython序列对象,则可以更改以下行:
rna_x.append(record.seq)
改为:
rna_x.append(str(record.seq))
然后rna_x
将包含:
['RSKKCMWRMRRAACKRWUSRSWSK']