我的目标是从csv文件中读取一些字符串(此内容中的部分DNA),然后搜索另一个txt文件,查找这些字符串在这些字符串中连续出现的次数,但我当前的代码创建了一个无限循环(我这样做是因为我暂时无法找到合适的条件)。谢谢你的帮助
我的想法是:如果目标字符串在中,则搜索它,如果目标字符串在中,则搜索它的两倍,如果目标字符串在中,则将数字增加三倍,直到目标字符串不再在readed
中
#Header line of csv : name,AGATC,AATG,TATC
# so checkstr = [AGATC,AATG,TATC]
#Example of searched strings `GCTAAATTTGTTCAGCCAGATGTAGGCTTACAAATCAAGCTGTCCGCTCGGCACGGCCTACACACGTCGTGTAACTACAACAGCTAGTTAATCTGGATATCACCATGACCGAATCATAGATTTCGCCTTAAGGAGCTTTACCATGGCTTGGGATCCAATACTAAGGGCTCGACCTAGGCGAATGAGTTTCAGGTTGGCAATCAGCAACGCTCGCCATCCGGACGACGGCTTACAGTTAGTAGCATAGTACGCGATTTTCGGGAAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGTATCTATCTATCTATCTATCT`
例如,您应该能够找到该字符串中连续出现AGATC
的次数,并将该或记录返回内存
checkstr = [] #global array that tells us what str to read
def readtxt(csvfile,seq):
with open(f'{csvfile}','r') as p:#finding which str to read from header line of the csv
header = csv.reader(p)
for row in header:
checkstr = row[1:]
break
with open(f'{seq}','r') as f:#searching the text for strs
readed = f.read()
for j in checkstr:
n = 1
jnew = n * j
while True:
if jnew in readed:
n += 1
print(f"{jnew} and {n}")
break
else:
break
它的工作原理是,将字符串按子字符串拆分将在连续的子字符串上返回空字符串。例如:
在本例中
abbcd
中连续的b
数是空字符串的计数加上1(在本例中为2)在此基础上,我们可以使用
itertools groupby
来计算分割字符串中每组文本出现的次数,这是前面代码的结果,这意味着如果我们计算列表中''
出现的次数并添加一次,我们将得到您的答案。try/except语句用于处理子字符串不在字符串中且结果计数为空的实例输出
相关问题 更多 >
编程相关推荐