我正在寻找.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.有人可以帮我找出计算字符时跳过的解决方案。
答案 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