поиск мотива в текстовом файле с использованием Python - PullRequest
0 голосов
/ 21 декабря 2018

У меня большой текстовый файл, подобный этому примеру:

пример:

>chr9:128683-128744
GGATTTCTTCTTAGTTTGGATCCATTGCTGGTGAGCTAGTGGGATTTTTTGGGGGGTGTTA
>chr16:134222-134283
AGCTGGAAGCAGCGTGGGAATCACAGAATGGCCGGGACCTTAAAGGCTTTGCTTGGCCTGG
>chr16:134226-134287
GGAAGCAGCGTGGGAATCACAGAATGGACGGCCGATTAAAGGCTTTGCTTGGCCTGGATTT
>chr1:134723-134784
AAGTGATTCACCCTGCCTTTCCGACCTTCCCCAGAACAGAACACGTTGATCGTGGGCGATA
>chr16:135770-135831
GCCTGAGCAAAGGGCCTGCCCAGACAAGATTTTTTAATTGTTTAAAAACCGAATAAATGTT

этот файл разделен на разные части, и каждая часть имеет 2 строки.1-я строка начинается с > (и эта строка называется ID), а 2-я строка представляет собой последовательность букв.Я хочу найти короткий мотив (GGAC) в последовательности букв, и если они содержат мотив, я хочу получить идентификатор этой строки (который на одну строку выше этого).

для приведенного выше примера вот ожидаемый вывод:

ожидаемый вывод:

>chr16:134222-134283
>chr16:134226-134287

Я пытаюсь сделать это в python, используя следующую команду, но она не возвращает то, что я хочу.

infile = open('infile.txt', 'r')
ss = 'CCGA'
new = []
for line in range(len(infile)):
    if not infile[line].startswith('>'):
        for match in pattern.finder(ss):
            new.append(infile[line-1])

Вы знаете, как это исправить?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Здесь может быть удобно использовать генератор.

def find_motif(f, motif):
    while True:
        try:
            id_line = next(f)
            text_line = next(f)
        except StopIteration:
            break
        if motif in text_line:
            yield id_line

with open("my file") as f:
    with_motif = find_motif(f, "ABCD")
    for id_line in with_motif:
        print(id_line) 

Итак:

text = """>chr9:128683-128744
GGATTTCTTCTTAGTTTGGATCCATTGCTGGTGAGCTAGTGGGATTTTTTGGGGGGTGTTA
>chr16:134222-134283
AGCTGGAAGCAGCGTGGGAATCACAGAATGGCCGGGACCTTAAAGGCTTTGCTTGGCCTGG
>chr16:134226-134287
GGAAGCAGCGTGGGAATCACAGAATGGACGGCCGATTAAAGGCTTTGCTTGGCCTGGATTT
>chr1:134723-134784
AAGTGATTCACCCTGCCTTTCCGACCTTCCCCAGAACAGAACACGTTGATCGTGGGCGATA
>chr16:135770-135831
GCCTGAGCAAAGGGCCTGCCCAGACAAGATTTTTTAATTGTTTAAAAACCGAATAAATGTT"""
f = iter(text.splitlines())

with_motif = find_motif(f, "GGAC")
for id_line in with_motif:
    print(id_line)

ВЫХОД:

>chr16:134222-134283
>chr16:134226-134287
0 голосов
/ 21 декабря 2018

Будет более надежно и просто использовать Biopython для этого:

from Bio import SeqIO

motif = 'GGAC'
for record in SeqIO.parse('input.fa', 'fasta'):
    if motif in record.seq:
        print(record.id)
...