Несколько значений dict, сгенерированных из многострочного FASTA - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь сгенерировать библиотеку идентификаторов последовательностей и последующей последовательности (как ключ, пары значений, соответственно) из файла FASTA и столкнулся с проблемой, которую не смог решить мой мозг программиста-новичка.

Короче говоря, мой многострочный файл FASTA (пример показан ниже) хранится в виде нескольких значений на ключ. Каждая новая строка в файле FASTA создает новое значение, в отличие от всей последовательности, сохраняемой как одно значение для каждого идентификатора последовательности.

Мой код находится ниже, а пример файла FASTA, из которого я извлекаю, - ниже. Любая помощь в том, как сделать так, чтобы вся последовательность сохранялась как одно значение, а не как несколько значений, была бы полезна! Похоже, у меня много чтения, чтобы продолжать делать ...

Заранее спасибо за любую помощь!

import sys
sequence = ''
fasta = {}
def seqs_from_file(filename):
    with open(filename) as f:
        for line in f:
            line = line.rstrip("\n")
        if not line:
            continue
        if line.startswith(">"):
            seq_name = line[1:]
            if seq_name not in fasta:
                fasta[seq_name] = []
            continue
        sequence = line
        fasta[seq_name].append(sequence)
print(fasta) # printing here is just so I can see if my dict. was correctly made

Пример из файла FASTA:

>646311950
ATGAATAATCGAGTCCACCAGGGCCACTTAGCCCGTAAACGCTTCGGGCA
AAACTTTCTCAACGATCAGTTCGTGATCGACAGTATTGTGTCTGCCATTA
ACCCGCAAAAGGGCCAGGCGATGGTCGAAATCGGCCCCGGTCTGGCGGCA
TTGACCGAACCGGTCGGCGAACGTCTGGACCAGCTGACGGTCATCGAACT
TGACCGCGATCTGGCGGCACGTCTGCAAACGCATCCATTCTTAGGCCCGA
AACTGACGATTTATCAGCAGGATGCGATGACCTTTAACTTTGGTGAACTG
GCCGAGAAAATGGGTCAGCCGCTGCGTGTTTTCGGCAACCTGCCTTATAA
CATCTCCACGCCGTTGATGTTCCATCTGTTTAGCTATACTGATGCCATTG
CCGACATGCACTTTATGTTGCAAAAAGAGGTGGTGAATCGTCTGGTTGCA
GGACCGAACAGCAAAGCGTATGGTCGATTAAGCGTCATGGCGCAATACTA
TTGCAATGTGATCCCGGTACTGGAAGTACCGCCGTCAGCCTTTACACCAC
CACCCAAAGTGGATTCCGCCGTCGTGCGCCTGGTTCCTCATGCAACGATG
CCTCACCCGGTTAAAGATGTTCGTGTGTTGAGCCGCATCACCACCGAAGC
CTTTAACCAGCGTCGTAAAACCATTCGTAACAGCCTCGGCAACCTGTTTA
GCGTCGAGGTGTTAACGGGAATGGGGATCGACCCGGCGATGCGAGCGGAA
AATATCTCTGTCGCGCAATATTGCCAGATGGCGAACTATCTGGCGGAGAA
CGCGCCTTTGCAGGAGAGTTAA

1 Ответ

0 голосов
/ 10 сентября 2018

Ваша логика обработки строки должна быть вместо отступа внутри цикла for, и вместо добавления sequence к fasta[seq_name] в виде списка, вы должны объединить sequence в виде строки, если хотите быть одно значение:

import sys
sequence = ''
fasta = {}
def seqs_from_file(filename):
    with open(filename) as f:
        for line in f:
            line = line.rstrip("\n")
            if not line:
                continue
            if line.startswith(">"):
                seq_name = line[1:]
                if seq_name in fasta:
                    fasta[seq_name].append('')
                else:
                    fasta[seq_name] = ['']
                continue
            sequence = line
            fasta[seq_name][-1] += sequence
    print(fasta)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...