使用Python搜索字符串中一个单词连续出现的次数(PSET6 CS50)

2024-09-29 02:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是从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

Tags: 文件ofcsv字符串in目标forread
1条回答
网友
1楼 · 发布于 2024-09-29 02:26:27

它的工作原理是,将字符串按子字符串拆分将在连续的子字符串上返回空字符串。例如:

s = 'abbcd'
s.split('b')
['a', '', 'cd']

在本例中abbcd中连续的b数是空字符串的计数加上1(在本例中为2)

在此基础上,我们可以使用itertools groupby来计算分割字符串中每组文本出现的次数,这是前面代码的结果,这意味着如果我们计算列表中''出现的次数并添加一次,我们将得到您的答案。try/except语句用于处理子字符串不在字符串中且结果计数为空的实例

from itertools import groupby

checkstr = ['AGATC', 'AATG', 'TATC']
s = 'GCTAAATTTGTTCAGCCAGATGTAGGCTTACAAATCAAGCTGTCCGCTCGGCACGGCCTACACACGTCGTGTAACTACAACAGCTAGTTAATCTGGATATCACCATGACCGAATCATAGATTTCGCCTTAAGGAGCTTTACCATGGCTTGGGATCCAATACTAAGGGCTCGACCTAGGCGAATGAGTTTCAGGTTGGCAATCAGCAACGCTCGCCATCCGGACGACGGCTTACAGTTAGTAGCATAGTACGCGATTTTCGGGAAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGAATGTATCTATCTATCTATCTATCT'
for c in checkstr:
    groups = groupby(s.split(c))
    try:
        print(c,[sum(1 for _ in group)+1 for label, group in groups if label==''][0])
    except IndexError:
        print(c,0)

输出

AGATC 0
AATG 43
TATC 5

相关问题 更多 >