我是一名初学python程序员,有搜索问题。我需要在DNA文件中找到一串DNA。问题是我不知道字符串在文件中出现的位置,它出现两次,我需要知道这两个位置。我当前的程序只能找到第一个字符串,我很难继续搜索找到第二个字符串。我的两个想法都失败了,但我认为只是因为我不明白如何使用这些功能。他们在这里:
使用.seek()查找我需要的第一个DNA串,并将其设置为第二次搜索的起点。我的问题是我不确切知道DNA字符串的位置,所以我试着将我的搜索位置设置为DNA字符串。然而,这不会起作用,因为数据需要以字节为单位来查找位置,而不是字符串。我试图使用.index()DNA字符串的位置并将其设置为变量,但这也不起作用。
使用.split()在找到第一个DNA字符串后拆分DNA文本文件,然后在休息的右半部分进行第二次搜索。我认为这样可行,但我最终只读错了一次:
IndexError:列表索引超出范围
具体来说,我正在编写.split(' str')[1]来使用字符串的后半部分。
假设我的逻辑在程序中是正确的,这些方法是否有效?有没有人有他们认为我应该尝试的不同想法?
答案 0 :(得分:2)
我把你的问题读作“我正试图找到DNA子序列的位置。”以下示例是否代表您要实现的目标?如果我过度简化你的问题,请告诉我,我可以修改。
>>> import re
>>> dna = 'AGTCTCCCGGATTTGGATTTAA' #super short, but just for proof of concept
>>> subseq = 'ATTT' #sequence you want to find within dna
>>> for location in re.finditer(subseq, dna):
... print 'start: %d end: %d' % (location.start(), location.end())
start: 10 end: 14
start: 16 end: 20
答案 1 :(得分:0)
您的文件有多大?如果它不是太长,你可以使用天真的方法:
file = open("filename.text", r)
genome = file.read()
file.close()
genome_length = len(genome)
pattern = "ATCT" #or whatever your pattern is
pattern_length = len(pattern)
pattern_locations = []
for i in range(genome_length - pattern_length - 1):
if pattern == genome[i:i+pattern_length]:
pattern_locations.append(i)
return pattern_locations
但是,如果基因组很长,则需要更复杂的算法才能在合理的时间内进行搜索(例如构建后缀树)