Подсчет повторяющихся шаблонов из текстового файла в python?

#python

#python

Вопрос:

Мне нужно подсчитать специальный шаблон из текстового файла. Мой код:

 sequence = input ("Enter a sequence valid: ")
with open(original_file, 'r') as read_obj:
    for line in read_obj:
        count = 0
        for i in range(len(line)):
            if sequence.upper() == (line[i:i   len(sequence)].upper()):
                count  = 1
        print(f"({count}) {line.upper()}", end=' ')
  

выходной поток:

 Enter a sequence valid : ACA
(0) CATGTCGTAGCTAGCTACTGTACTATTATTATCTGGATCGTAC
 (0) CTATGCGATGCTGACGTATCTAGCTACGTATCGTAGCTGATCTATCGATCGTATCGA
 (0) CATGCTAGTCTAGCTAGCTAGCTAGCGTAGCTACTGAGTCGATC
 (3) ACACACCCCACATTCTCGTACGATTTTCGGCGCGGGGCGGCCTATTATCTGCAT
 (2) ACACAC
 (0) TGTGTG
 (15) ACACACACACACACACACACACACACACACAC
 (1) TAGACAGTCGATCGACTGCAGCTTCG
 (0) CCACCATGGGTGG
 (0) AAAAATTTT
 (0) GGGG
 (0) AAAA
  

Мне нужно подсчитать общее количество найденных шаблонов для каждой строки, например, в этом случае 21 для ACA.
Мой текстовый файл:

 CATGTCGTAGCTAGCTACTGTACTATTATTATCTGGATCGTAC
CTATGCGATGCTGACGTATCTAGCTACGTATCGTAGCTGATCTATCGATCGTATCGA
CATGCTAGTCTAGCTAGCTAGCTAGCGTAGCTACTGAGTCGATC
ACACACCCCACATTCTCGTACGATTTTCGGCGCGGGGCGGCCTATTATCTGCAT
ACACAC
TGTGTG
ACACACACACACACACACACACACACACACAC
TAGACAGTCGATCGACTGCAGCTTCG
CCACCATGGGTGG
AAAAATTTT
GGGG
AAAA
  

Комментарии:

1. итак, в чем проблема? Я не могу найти 15 «ACA» в этой строке, за исключением того, что вы также считаете sub occurencies…so мое общее количество — 13

2. использование count . s = ‘ACACACCCCACATTCTCGTACGATTTTCGGCGCGGGGGGCGGCCTATTATCTGCAT’ print(s.count(‘ACA’))

3. Нет, это должно быть 21.

4. если последовательность перекрывается, например 'ACACA' , будет ли это количество равным 1 или 2?

5. это должно быть 2.

Ответ №1:

Если вам нужно подсчитать все вхождения, включая перекрывающиеся, тогда вы делаете что-то вроде этого

 s = """CATGTCGTAGCTAGCTACTGTACTATTATTATCTGGATCGTAC
CTATGCGATGCTGACGTATCTAGCTACGTATCGTAGCTGATCTATCGATCGTATCGA
CATGCTAGTCTAGCTAGCTAGCTAGCGTAGCTACTGAGTCGATC
ACACACCCCACATTCTCGTACGATTTTCGGCGCGGGGCGGCCTATTATCTGCAT
ACACAC
TGTGTG
ACACACACACACACACACACACACACACACAC
TAGACAGTCGATCGACTGCAGCTTCG
CCACCATGGGTGG
AAAAATTTT
GGGG
AAAA"""

def get_occurrences(s):
    counter = 0
    for i in range(len(s) - 3):
        if s[i:i 3] == "ACA": 
            counter  = 1
    return counter

sum([get_occurrences(line) for line in s.split("n")])
  

Это даст вам желаемое 21 .