Извлечение генных последовательностей из файла FASTA? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть следующий код, который читает файл FASTA с 10 последовательностями генов и возвращает каждую последовательность в виде матрицы.Однако, кажется, что код отсутствует в самой последней последовательности, и мне интересно, почему?

file=open('/Users/vivianspro/Downloads/rosalind_cons (5).txt', 'r')
line=file.readline()

strings = []
sequence=''
while line:
    #line=line.rstrip('\n')
    line = line.strip() #empty () automatically strips the \n
    if '>' in line:
        if sequence != "":
            strings.append(sequence)
            sequence = ""
        #sequence=line
    else:
        sequence+=line
    line=file.readline()
for s in strings:
    print(s)

Motifs = []
for seq in strings:
    Motifs.append(list(seq))

#make every symbol into an element in the list separated by ,
for s in Motifs:
    print(s) ````


Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы добавляете к strings только когда видите новый >, но после последней последовательности его нет.

Вот рефакторинг, который, будем надеяться, также будет несколько более идиоматическим.

strings = []
sequence=''

with open('/Users/vivianspro/Downloads/rosalind_cons (5).txt', 'r') as file:
    for line in file:
        line = line.rstrip('\n')
        if line.startswith('>'):
            if sequence != "":
                strings.append(sequence)
            sequence = ""
        else:
            sequence+=line
    # After the last iteration, append once more if we have something to append
    if sequence:
        strings.append(sequence)
0 голосов
/ 08 февраля 2019

Поскольку файлы FASTA содержат данные в таком формате:

>ID1
seq_1
>ID2
seq_2
...

Согласно вашему коду, если ваша строка содержит только >, вы пытаетесь добавить последовательность.Это означает, что вы добавляете последовательность для ID_1, когда выполняете итерацию для ID_2.

Чтобы решить эту проблему, вы можете сделать что-то вроде этого:

for line in file:
    line = line.strip()
    if '>' in line: # Line 1
        line = file.readline().strip()
        # print(line)
        strings.append(line)

В этом примере выше используется тот факт, чтов файле FASTA последовательность идет сразу после идентификатора, который содержит символ > (вы можете изменить строку 1, чтобы он просто проверял первый символ, line[0] == ">").

...