【问题标题】:Searching file for the same string twice and printing both separately两次在文件中搜索相同的字符串并分别打印
【发布时间】:2016-12-29 01:40:54
【问题描述】:

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

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

  2. 在找到第一个 DNA 字符串后,使用 .split() 拆分 DNA 文本文件,然后在中断的右半部分运行第二次搜索。我认为这会起作用,但我最终得到一个错误阅读:

    IndexError: 列表索引超出范围

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

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

【问题讨论】:

  • 欢迎来到 Stackoverflow。您会发布您的搜索和拆分方法是如何使用的吗?您是否编写了 seek 和 split,或者它们是现有 API 的一部分(生物信息学或其他)? (如果是前者,请贴出来。如果是后者,请告诉我们图书馆的名称。)

标签: python python-2.7 bioinformatics


【解决方案1】:

我将您的问题理解为“我正在尝试查找 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

【讨论】:

    【解决方案2】:

    您的文件有多大?如果它不是太长,您可以使用幼稚的方法:

    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
    

    但是,如果基因组很长,则需要更复杂的算法才能在合理的时间内进行搜索(例如构建后缀树)

    【讨论】:

      猜你喜欢
      • 2014-09-06
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2023-03-19
      • 2012-06-21
      • 2016-10-20
      • 1970-01-01
      相关资源
      最近更新 更多