二核苷酸计数跳过重复

时间:2016-03-07 05:51:34

标签: python count bioinformatics

我正在寻找.txt文件中的二核苷酸计数。我正在使用的样本数据集是'SSSS'。下面的代码就是我现在正在运行的代码。

import os
stseq = open(os.path.expanduser("/Users/Mitch_Whitaker/Desktop/A5 count.txt"))
lines = stseq.read()
mystr = '\t'.join([line.strip() for line in lines])
all_counts = []
for base1 in ['S', 'T']:
    for base2 in ['S', 'T']:
        dinucleotide = base1 + base2
        count = lines.count(dinucleotide)
        print("count is " + str(count) + " for " + dinucleotide)
        all_counts.append(count)
print(all_counts)

我得到的返回'SS'计数为2,而实际上应该是3.有人可以帮我找出计算字符时跳过的解决方案。

2 个答案:

答案 0 :(得分:0)

这里的问题可能是因为重叠的子字符串没有被计算在内。我假设子串SSS应该算作二核苷酸SS的两个实例?你使用的count()方法只返回1.如果这确实是问题,你可能需要设计自己的计数方法。

答案 1 :(得分:0)

Chuck Logan Lim所述,问题确实是不计算重叠的子串。

一种可能的解决方案是使用正则表达式。在此,(?=...)lookahead assertion

from itertools import product
import re

mystr = 'SSSS'
for base1 , base2 in product('ST', repeat=2):
    dinucleotide = base1 + base2
    pattern = '(?=({}))'.format(dinucleotide)
    m = re.findall(pattern, mystr)
    print("count is {} for {}".format(len(m), dinucleotide))

打印:

count is 3 for SS
count is 0 for ST
count is 0 for TS
count is 0 for TT