Python - 计算两个特定字符串之间的字符

时间:2015-05-13 10:26:13

标签: python count

我制作了一个包含随机碱基序列(ATCG)的文本文件,并想在这些序列中找到最长和最短的“阅读框”。

我能够通过“searchfile”和for循环识别Start-and-Stop-Codons(提到的两个“特定字符串”)并且还知道计数的基础知识(最后的代码示例)但是我找不到任何可能将这两者设置为我可以统计的“边界”。

任何人都可以给我一个提示或告诉我如何调用这样的函数/操作,这样我至少可以在纪录片中找到它或者它看起来如何?我发现了许多选项,如何计算各种不同的东西,但没有在“x”和“y”之间计数。

我如何查找我想要计算的字符串的示例:

searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
searchfile.close()

整个代码:

import numpy as np

BASES = ('A', 'C', 'T', 'G')
P = (0.25, 0.25, 0.25, 0.25)

def random_dna_sequence(length):
    return ''.join(np.random.choice(BASES, p=P) for _ in range(length))

with open('dna.txt', 'w+') as txtout:
    for _ in range(10):
        dna = random_dna_sequence(50)
        txtout.write(dna)
        txtout.write("\n")


searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
searchfile.close()

searchfile = open('dna.txt', 'r')
for line in searchfile:
    if "ATG" in line: print (line)
    elif "TAG" in line: print (line)
    elif "TAA" in line: print (line)
    elif "TGA" in line: print (line)
    else: print ("no stop-codon detected")
searchfile.close()

旁注:打印指令只是用于测试的临时占位符。最后我想在这一点上设置找到的字符串,如提到的“边界”(我找不到更好的名字)。

dna.txt文件中的一些示例行:

GAAGACGCAATAGGTTCACGGCGCTCATAGGCTTGCCCTCATAGGGCTTG
TCTGAGGTAGAAGGAGCTACTGCCGTTGCAGGTGACGCCCACAGTCCTGA
GTTATTACTCCCTGACTGTCATCTGTTCGGATACCGTGCAGCGCATCGAG
AGGAGATAACGCGATCCTGAGACAGTTTACCTATATGTTCACTACGCATG
CCGAGCTGATCCGACTACTGAAGGTGAATTCTGAAGCTAATCTGCAGTTC

这是一个小例子(我用10和50进行测试)但最后文件应包含10000个序列,每个1000个字符。

1 个答案:

答案 0 :(得分:1)

我会做的是这样的事情:

with open("dna.txt", 'r') as searchfile:
    all_dna = searchfile.read()
    start = all_dna.index("ATG")
    rem_dna = all_dna[start + 3:]
    end = rem_dna.index("ATG")
    needed_dna = all_dna[start:(end + 3)]
print len(needed_dna)

index查找字符串中作为参数传递的子字符串的位置,如果找不到子字符串,则会raise ValueErrorwith是一个关键字,可用作文件I / O的安全预防措施,确保即使该块内的代码导致错误,文件也会正确关闭。如果您不想在needed_dna中包含起始和结束“ATG”,则可以将其设置为all_dna[(start + 3):end]。顺便说一下,括号表示“从冒号前的参数(包括零索引)开始,到冒号后的参数(非包含,也为零索引),从指定字符串的子串开始。也可以用于列表,并且可以在没有冒号的情况下使用以获取特定索引处的字符。希望这有帮助!