Python 搜索字符串中最近的序列

Python 搜索字符串中最近的序列,python,string,bioinformatics,biopython,Python,String,Bioinformatics,Biopython,我需要在给定参考基因组的情况下,将重叠群转换为各自的蛋白质序列(即,我需要取一个子串,其位置在字符串上已经知道,并且我需要找到最近的起始密码子和终止密码子-一个特定的3个字母的序列,如代码中所述) 这是一个棘手的问题,因为有时挫伤的第一个位置不是三的倍数(即挫伤中的前三个核苷酸可能与密码子不完全匹配)。此外,有时重叠群可能位于基因间区域(即基因之间)。目的是分离编码和非编码DNA 这是我目前的代码: from Bio.Seq import Seq from Bio.Alphabet import

我需要在给定参考基因组的情况下,将重叠群转换为各自的蛋白质序列(即,我需要取一个子串,其位置在字符串上已经知道,并且我需要找到最近的起始密码子和终止密码子-一个特定的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\u contigs=['ATGAAC','ATGAACGAA']
extended\u positions\u contigs=[12,17]
。这些是位于基因内的重叠群。为了将它们编码成肽,我需要回到字符串中,直到找到起始密码子并扩展初始重叠群(例如
TGAAC
->
ATGAAC
GAA
->
ATGAACGAA

我还应该得到
intergenic\u contigs=['CCAA','GGAC']
intergenic\u positions\u contigs=[5,22]
。当运行丢失的代码时,计算机搜索字符串左侧,并在开始密码前找到一个停止密码(例如,
标记
)。因此,挫伤位于两个基因之间,不需要添加任何东西。这些基因间重叠只是储存在一个新的列表中

我的代码继续:

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\u contigs
转换为
new\u prot\u contigs=['MN','E']

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

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


任何帮助都将不胜感激

这个答案以前似乎已经得到了回答

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

getorf -find 3 genome.fna genome.orf

我猜如果你在Windows系统上做这件事会比较棘手,但是考虑一下在ValualBox环境下做这件事。如今,大多数生物信息学都是在unix系统上完成的

我正在考虑对代码的第一部分使用“in”运算符(例如,如果字符串中的“ATG:…”),但是,我需要在沿着字符串搜索给定起始位置(即接触点的起点)左侧时在本地执行此操作。有什么想法吗?有没有可能在起始密码子、终止密码子和重叠密码子之间还有别的东西?(即TGAAC->ATGAAC和GAA->ATGAACxxxyyyyyyyGaA)阅读这篇文章看起来像是一篇关于SE生物信息学问题的交叉文章: