Python 在文件中搜索同一字符串两次并分别打印
我是一个初级python程序员,有一个搜索问题。我需要在DNA文件中找到一串DNA。问题是我不知道字符串在文件中出现的位置,它出现了两次,我需要知道两个位置。我当前的程序只能找到第一个字符串,我很难让它继续搜索第二个字符串。我的两个想法都失败了,但我认为这只是因为我不知道如何使用这些函数。这是:Python 在文件中搜索同一字符串两次并分别打印,python,python-2.7,bioinformatics,Python,Python 2.7,Bioinformatics,我是一个初级python程序员,有一个搜索问题。我需要在DNA文件中找到一串DNA。问题是我不知道字符串在文件中出现的位置,它出现了两次,我需要知道两个位置。我当前的程序只能找到第一个字符串,我很难让它继续搜索第二个字符串。我的两个想法都失败了,但我认为这只是因为我不知道如何使用这些函数。这是: 使用.seek()查找我需要的第一个DNA字符串,并将其设置为第二次搜索的起点。我的问题是我不知道DNA字符串的确切位置,所以我尝试将搜索位置设置为DNA字符串。但是,这不起作用,因为数据需要以字节为单
假设我的逻辑在程序中是正确的,这些方法会起作用吗?有没有人有不同的想法,他们认为我应该试试 您的文件有多大?如果长度不太长,您可以使用朴素的方法:
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
但是,如果基因组很长,则需要更复杂的算法才能在合理的时间内进行搜索(例如构建后缀树)您的文件有多大?如果长度不太长,您可以使用朴素的方法:
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
然而,如果基因组很长,则需要更复杂的算法,以便在合理的时间内进行搜索(例如构建后缀树)我将您的问题理解为“我正在试图找到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
我把你的问题理解为“我正试图找到一个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
欢迎来到Stackoverflow。你能发布一下你的seek和split方法是如何使用的吗?您是否编写了seek和split,或者它们是现有API的一部分(生物信息学或其他)?(如果是前者,请邮寄。如果是后者,请告诉我们图书馆的名称。)欢迎来到Stackoverflow。你能发布一下你的seek和split方法是如何使用的吗?您是否编写了seek和split,或者它们是现有API的一部分(生物信息学或其他)?(如果是前者,请张贴。如果是后者,请告诉我们图书馆的名称。)