Как исправить «генератор» объект не подписывается »ошибка при чтении файла FastA с BioPython - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь открыть и прочитать файл 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 голосов
/ 30 декабря 2018

Ваш вопрос и код вводят в заблуждение относительно того, что вы хотите - вы, кажется, хотите выводить в файл, а также в список для использования в более поздней функции.Основная проблема, которую я вижу в вашем коде: 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']
...