如何只读取字符串或子字符串的特定部分
How to read only a particular part of a string or a sub-string
这个项目的目标是从一个文本文件中打开并读取一个DNA序列,例如如果子串是AGATC然后连续的子串也是,我们添加到计数器,一旦连续sub-string 不再是 AGATC 目的是将其统计到范围内的最高分,清除计数器并继续搜索以找到最长的连续序列。
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if i == 'A' and seqRead[i:i+6] == 'AGATC':
while i == 'A' and seqRead[i:i+6] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
现在我认为我遇到的问题是我认为我没有正确比较文本序列,因此没有读取字符串中正确的字母序列。
我的目标是将 'i' 作为 'A' 进行跟踪,然后提取连续的 4 个字母并将其与 'AGATC' 进行比较,然后如果匹配则增加计数器并更改 'i' 到被比较的后面的字母,如果是A 重复到不再连续,再往上加,直到结束。
这是我至少,但是当 运行 调试器时,我注意到它从未进入第一个 if 语句,这让我相信我比较的方式是不正确的。
示例输入:
AGATCAGATCAGATCAGATCAGATCDJFDHFDTTTTCCSSDDSDDGFJFHAGATCAGATCAGATCAGATCAGATCAGATGJFHJGHJDSHGDKFSAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCDKFDKDFKGJKDFKAGATCkFGJKFDDAGATCDFKJKFJFKDJKAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCKFDHDFKFDHKGHKDFGJFKHDFK
预期输出:最高 = 30
由于AGATC最长连续出现30次
输入:
AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG
输出:最高 = 4
我是否弄错了如何使用 seqRead[i:i+6]?
我怎样才能做得更好?
您的子字符串太长,seqRead[i:i+6]
将给出一个长度为 6 个字符的字符串,而不是 5 个字符。该行(以及进行类似比较的另一行)应该是 seqRead[i:i+5]
.此外,您试图将迭代器 (i
) 与一个字母进行比较,而我认为您的意思是比较 [=14= 中迭代器的 位置 处的字母] 反而。 i == 'A'
应该改为 seqRead[i] == 'A'
:
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
while seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
在您的代码中,if
之前的 while
循环是多余的。而且您正在对不正确的子字符串进行切片,这是经过更新和简化的代码:
for i in range(len(seqRead)):
while seqRead[i:i+5] == "AGATC":
counter += 1
i += 5
if counter > highest:
highest = counter
counter = 0
这个项目的目标是从一个文本文件中打开并读取一个DNA序列,例如如果子串是AGATC然后连续的子串也是,我们添加到计数器,一旦连续sub-string 不再是 AGATC 目的是将其统计到范围内的最高分,清除计数器并继续搜索以找到最长的连续序列。
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if i == 'A' and seqRead[i:i+6] == 'AGATC':
while i == 'A' and seqRead[i:i+6] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
现在我认为我遇到的问题是我认为我没有正确比较文本序列,因此没有读取字符串中正确的字母序列。
我的目标是将 'i' 作为 'A' 进行跟踪,然后提取连续的 4 个字母并将其与 'AGATC' 进行比较,然后如果匹配则增加计数器并更改 'i' 到被比较的后面的字母,如果是A 重复到不再连续,再往上加,直到结束。 这是我至少,但是当 运行 调试器时,我注意到它从未进入第一个 if 语句,这让我相信我比较的方式是不正确的。
示例输入:
AGATCAGATCAGATCAGATCAGATCDJFDHFDTTTTCCSSDDSDDGFJFHAGATCAGATCAGATCAGATCAGATCAGATGJFHJGHJDSHGDKFSAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCDKFDKDFKGJKDFKAGATCkFGJKFDDAGATCDFKJKFJFKDJKAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCAGATCKFDHDFKFDHKGHKDFGJFKHDFK
预期输出:最高 = 30
由于AGATC最长连续出现30次
输入:
AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG
输出:最高 = 4
我是否弄错了如何使用 seqRead[i:i+6]?
我怎样才能做得更好?
您的子字符串太长,seqRead[i:i+6]
将给出一个长度为 6 个字符的字符串,而不是 5 个字符。该行(以及进行类似比较的另一行)应该是 seqRead[i:i+5]
.此外,您试图将迭代器 (i
) 与一个字母进行比较,而我认为您的意思是比较 [=14= 中迭代器的 位置 处的字母] 反而。 i == 'A'
应该改为 seqRead[i] == 'A'
:
str_count = []
counter = 0
highest = 0
# read sequence
with open(argv[2], "r") as seq:
seqRead = seq.read()
for i in range(len(seqRead)):
#search for consecutive AGATC
if seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
while seqRead[i] == 'A' and seqRead[i:i+5] == 'AGATC':
counter += 1
i = i + 5
if highest < counter:
highest = counter
counter = 0
else:
counter = 0
在您的代码中,if
之前的 while
循环是多余的。而且您正在对不正确的子字符串进行切片,这是经过更新和简化的代码:
for i in range(len(seqRead)):
while seqRead[i:i+5] == "AGATC":
counter += 1
i += 5
if counter > highest:
highest = counter
counter = 0