首页 > 解决方案 > 在字符串中搜索最近的序列

问题描述

在给定参考基因组的情况下,我需要将 contigs 转换为它们各自的蛋白质序列(即,我需要获取一个子字符串,其位置在字符串上已知,并且我需要找到最近的起始和终止密码子 - 一个特定的 3 个字母序列写在代码中)。

这很棘手,因为有时重叠群的第一个位置不会是三的倍数(即重叠群中的前三个核苷酸可能与密码子不完全匹配)。此外,有时重叠群可能位于基因间区域(即基因之间)。目标是分离编码和非编码 DNA。

到目前为止,这是我的代码:

from Bio.Seq import Seq
from Bio.Alphabet import generic_dna, generic_protein

start_codons = ['ATG']
stop_codons = ['TAG', 'TAA', 'TGA']

string = 'GG*TAG*CCAATT*ATG*AACGAA*TAG*GAC' #remove '*', just for visual
contigs = ['CCAA', 'TGAAC', 'GAA', 'GGAC']
positions = [5, 12, 17, 22] #position indices for each contig on string

extended_contigs = []
extended_position_contigs = []
intergenic_contigs = []
intergenic_position_contigs = []
for i in contigs:
    extended_contigs.append(#some code)
    extended_positions_contigs.append(#some code)
    intergenic_contigs.append(#some code)
    intergenic_positions_contigs.append(#some code)

我应该得到extended_contigs = ['ATGAAC', 'ATGAACGAA']extended_positions_contigs = [12, 17]。这些是位于基因内的重叠群。为了将它们编码成肽,我需要回到字符串中,直到找到起始密码子并扩展初始重叠群(例如TGAAC->ATGAACGAA-> ATGAACGAA

我也应该得到intergenic_contigs = ['CCAA', 'GGAC']and intergenic_positions_contigs = [5, 22]。当丢失的代码运行时,计算机搜索字符串的左侧并TAG在起始密码子之前找到一个终止密码子(例如 )。因此,重叠群位于两个基因之间,无需添加任何内容。这些基因间重叠群只是存储在一个新列表中。

我的代码继续:

prot_contigs = []
for i in extended_contigs:
    my_dna = Seq(i, generic_dna)
    my_prot = my_dna.translate()
    prot_contigs.append(str(my_prot))

在这里,不需要添加新代码。以上运行后,prot_contigs = ['MN', 'MNE'].

代码的最后一步(我需要帮助)将转换prot_contigsnew_prot_contigs = ['MN', 'E'].

如何?如果对于任何重叠群(例如'TGAAC'),开头或结尾是另一个密码子的一部分(不是 3 的完美倍数),则将保留两端的额外密码子(例如'MN'保持'MN')。否则,如果重叠群(例如'GAA')与密码子完全匹配,则添加到其上的任何内容都将被删除(例如'MNE'变为'E')。

我会尝试自己解决代码的 2 部分,但我不确定如何在字符串上占据一个位置(即 contig 的起始点)并沿着字符串查找最近的起始/终止密码子,所以我可以确定DNA 的功能和准确地将蛋白质编码重叠群测序成肽。

任何帮助,将不胜感激!

标签: pythonstringbioinformaticsbiopython

解决方案


这个答案之前好像已经回答过了

如何在 Python 中找到开放阅读框

但是你真的不需要自己这样做(除非你真的想这样做)。有很多工具可以轻松做到这一点。EMBOSS 套件中的一个示例。

getorf -find 3 genome.fna genome.orf

我想如果您在 Windows 系统上执行此操作会更加棘手,但请考虑在 virtualbox 环境中执行此操作。如今,大多数生物信息学都是在 Unix 系统上完成的。


推荐阅读