Подсчет последовательностей ДНК с помощью python / biopython

Мой сценарий ниже – подсчет вхождений последовательностей «CCCCAAAA» и «GGGGTTTT» из стандартного файла FASTA:

>contig00001 CCCCAAAACCCCAAAACCCCAAAACCCCTAcGAaTCCCcTCATAATTGAAAGACTTAAACTTTAAAACCCTAGAAT 

Сценарий подсчитывает последовательность CCCCAAAA здесь 3 раза

CCCCAAAACCCCAAAACCCCAAAA (CCCC не засчитывается)

Может кто-нибудь, пожалуйста, сообщите, как я буду включать последовательность CCCC в конце, как половина, чтобы вернуть значение 3.5 для этого.

До сих пор я не увенчался успехом.

Мой сценарий выглядит следующим образом …

 from Bio import SeqIO input_file = open('telomer.test.fasta', 'r') output_file = open('telomer.test1.out.tsv','w') output_file.write('Contig\tCCCCAAAA\tGGGGTTTT\n') for cur_record in SeqIO.parse(input_file, "fasta") : contig = cur_record.name CCCCAAAA_count = cur_record.seq.count('CCCCAAAA') CCCC_count = cur_record.seq.count('CCCC') GGGGTTTT_count = cur_record.seq.count('GGGGTTTT') GGGG_count = cur_record.seq.count('GGGG') #length = len(cur_record.seq) splittedContig1=contig.split(CCCCAAAA_count) splittedContig2=contig.split(GGGGTTTT_count) cnt1=len(splittedContig1)-1 cnt2=len(splittedContig2) cnt1+sum([0.5 for e in splittedContig1 if e.startswith(CCCC_count)])) = CCCCAAAA_count cnt2+sum([0.5 for e in splittedContig2 if e.startswith(GGGG_count)])) = GGGGTTTT_count output_line = '%s\t%i\t%i\n' % \ (CONTIG, CCCCAAAA_count, GGGGTTTT_count) output_file.write(output_line) output_file.close() input_file.close() 

Вы можете использовать разделение и startwith list comprehension следующим образом:

 contig="CCCCAAAACCCCAAAACCCCAAAACCCCTAcGAaTCCCcTCATAATTGAAAGACTTAAACTTTAAAACCCTAGAAT" splitbase="CCCCAAAA" halfBase="CCCC" splittedContig=contig.split(splitbase) cnt=len(splittedContig)-1 print cnt+sum([0.5 for e in splittedContig if e.startswith(halfBase)]) 

Вывод:

 3.5 
  1. разделите строки на основе CCCCAAAA . Он предоставит список, в CCCCAAAA списка CCCCAAAA будет удален
  2. длина расщепления – 1 дает число случаев возникновения CCCCAAAA
  3. в разделенном элементе поиск элементов начинается с CCCC . Если найдено, добавьте 0.5 для подсчета для каждого появления.