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