使用BioPython读取Fasta文件时,如何解决“生成器对象无法下标”错误

时间:2018-12-20 23:37:16

标签: python biopython fasta

我正在尝试打开和读取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返回序列。

1 个答案:

答案 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']