【发布时间】:2020-09-29 18:42:42
【问题描述】:
目前正在开发 CS50。我试图在文件 DNA 序列中计算 STR,但它总是多计。
我的意思是,例如:文件 DNA 中有多少“AGATC”连续重复。
此代码只是尝试找出如何准确计算那些重复的DNA。
import csv
import re
from sys import argv, exit
def main():
if len(argv) != 3:
print("Usage: python dna.py data.csv sequence.txt")
exit(1)
with open(argv[1]) as csv_file, open(argv[2]) as dna_file:
reader = csv.reader(csv_file)
#for row in reader:
# print(row)
str_sequences = next(reader)[1:]
dna = dna_file.read()
for i in range(len(dna)):
count = len(re.findall(str_sequences[0], dna)) # str_sequences[0] is 'AGATC'
print(count)
main()
DNA 文件 11 (AGATC) 的结果:
$ python dna.py databases/large.csv sequences/11.txt
52
结果应该是 43。但是,对于 small.csv,它的计数准确。但对于大它总是超过计数。后来我知道我的代码计算了 DNA 文件(AGATC)中的所有匹配词。但任务是,您必须获取仅连续重复的 DNA,而忽略另一个相同的 DNA 是否再次出现。
{AGATCAGATCAGATCAGATC(T)TTTTAGATC}
那么,如果 DNA 击中 (T),如何停止计数,并且不需要计算后面的 AGATC? 我应该在我的代码中更改什么?特别是在我使用的 re.findall() 中。有人说用子串,怎么用子串呢?或者我可以像我一样使用正则表达式吗?
如果可以,请编写您的代码。对不起我的英语不好。
【问题讨论】:
标签: python python-3.x cs50