用python / biopython计算DNA序列

时间:2014-04-01 15:47:38

标签: python bioinformatics biopython dna-sequence

我的下面的脚本是从标准的FASTA文件计算序列'CCCCAAAA'和'GGGGTTTT'的出现次数:

>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() 

1 个答案:

答案 0 :(得分:2)

您可以使用split和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将被删除
  2. splitted的长度 - 1给出CCCCAAAA
  3. 的出现次数 在splitted元素中,查找元素以CCCC开头。如果发现,每次出现时加0.5计数。