Python 在文件中搜索同一字符串两次并分别打印

Python 在文件中搜索同一字符串两次并分别打印,python,python-2.7,bioinformatics,Python,Python 2.7,Bioinformatics,我是一个初级python程序员,有一个搜索问题。我需要在DNA文件中找到一串DNA。问题是我不知道字符串在文件中出现的位置,它出现了两次,我需要知道两个位置。我当前的程序只能找到第一个字符串,我很难让它继续搜索第二个字符串。我的两个想法都失败了,但我认为这只是因为我不知道如何使用这些函数。这是: 使用.seek()查找我需要的第一个DNA字符串,并将其设置为第二次搜索的起点。我的问题是我不知道DNA字符串的确切位置,所以我尝试将搜索位置设置为DNA字符串。但是,这不起作用,因为数据需要以字节为单

我是一个初级python程序员,有一个搜索问题。我需要在DNA文件中找到一串DNA。问题是我不知道字符串在文件中出现的位置,它出现了两次,我需要知道两个位置。我当前的程序只能找到第一个字符串,我很难让它继续搜索第二个字符串。我的两个想法都失败了,但我认为这只是因为我不知道如何使用这些函数。这是:

  • 使用.seek()查找我需要的第一个DNA字符串,并将其设置为第二次搜索的起点。我的问题是我不知道DNA字符串的确切位置,所以我尝试将搜索位置设置为DNA字符串。但是,这不起作用,因为数据需要以字节为单位才能找到位置,而不是字符串。我尝试使用.index()作为DNA字符串的位置,并将其设置为变量,但这也不起作用

  • 在找到第一个DNA字符串后,使用.split()拆分DNA文本文件,然后在断点的右半部分运行第二次搜索。我原以为这样做行得通,但最终我的错误是:

    索引器:列表索引超出范围

  • 具体来说,我正在编写.split('str')[1]来使用字符串的后半部分


    假设我的逻辑在程序中是正确的,这些方法会起作用吗?有没有人有不同的想法,他们认为我应该试试

    您的文件有多大?如果长度不太长,您可以使用朴素的方法:

    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的一部分(生物信息学或其他)?(如果是前者,请张贴。如果是后者,请告诉我们图书馆的名称。)