#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
.