Python - поиск мотива - ввод: файл .txt с 10 последовательностями и 10 мотивами - PullRequest
0 голосов
/ 07 февраля 2019

Когда я запускаю свою функцию BruteForce только с одним входом, она работает, и результат правильный.

def BruteForce(s, t):
    occurrences = []
    for i in range(len(s)-len(t)+1): # loop over alignment
        match = True
        for j in range(len(t)): # loop over characters
            if s[i+j] != t[j]:  # compare characters
                match = False   # mismatch
                break
        if match:   # allchars matched
            occurrences.append(i)

    print(occurrences)

t = 'CAACTTCCA'

s = ''

BruteForce (s, t)

[2, 9, 48, 152, 175, 205, 212, 261, 277, 284, 300, 307, 370, 410, 607, 623, 717, 735,751, 758, 792, 844]

Но когда я использую его в следующем цикле, он ничего не возвращает!Я использовал print (), чтобы увидеть, читает ли он строки и мотивы из файла input_2.txt, но он возвращает пустой список вхождений [].

with open('input_2.txt', 'r') as input_2:
    nt = input_2.readline() #nt is the no of strings+motifs in 1st line
    nt = int(nt) #in this case it is 10

    for i in range(nt):
        s = input_2.readline()
        print(s)
        t = input_2.readline()
        print(t)
        BruteForce(s, t)

Не могли бы вы дать мнезнаете, какие изменения здесь нужны?Большое спасибо, Beeta

input_2.txt

10

CAACTTCCA

TGTATCGTG

TTTCAGCTT

GCATCCGGC

GACGAGCGA

GGACCCCGG

ACCTTCGAC

TATTCCCTA

AAAGGATAA

TCAAATATC

1 Ответ

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

Этот простой код решит вашу проблему, поэтому программа прочитала файл и поместила каждую строку в список. Я отфильтровал список, потому что мне нужно удалить '\ n' и после того, как я запустил цикл и проверил индекс каждого элемента.если index это пара, то s и t будут равны значению следующего элемента.

f = open('test.txt', 'r')
all = list(filter(lambda a: a != '\n', f.readlines()))

for idx, val in enumerate(all):
    if idx % 2 == 0:
        s=val.rstrip()
        t=all[idx + 1].rstrip()
        BruteForce(s, t)
...