Skip to main content
 首页 » 编程设计

python之翻译我的序列

2025年05月04日13pander-it

我必须编写一个脚本来翻译这个序列:

dict = {"TTT":"F|Phe","TTC":"F|Phe","TTA":"L|Leu","TTG":"L|Leu","TCT":"S|Ser","TCC":"S|Ser", 
              "TCA":"S|Ser","TCG":"S|Ser", "TAT":"Y|Tyr","TAC":"Y|Tyr","TAA":"*|Stp","TAG":"*|Stp", 
              "TGT":"C|Cys","TGC":"C|Cys","TGA":"*|Stp","TGG":"W|Trp", "CTT":"L|Leu","CTC":"L|Leu", 
              "CTA":"L|Leu","CTG":"L|Leu","CCT":"P|Pro","CCC":"P|Pro","CCA":"P|Pro","CCG":"P|Pro", 
              "CAT":"H|His","CAC":"H|His","CAA":"Q|Gln","CAG":"Q|Gln","CGT":"R|Arg","CGC":"R|Arg", 
              "CGA":"R|Arg","CGG":"R|Arg", "ATT":"I|Ile","ATC":"I|Ile","ATA":"I|Ile","ATG":"M|Met", 
              "ACT":"T|Thr","ACC":"T|Thr","ACA":"T|Thr","ACG":"T|Thr", "AAT":"N|Asn","AAC":"N|Asn", 
              "AAA":"K|Lys","AAG":"K|Lys","AGT":"S|Ser","AGC":"S|Ser","AGA":"R|Arg","AGG":"R|Arg", 
              "GTT":"V|Val","GTC":"V|Val","GTA":"V|Val","GTG":"V|Val","GCT":"A|Ala","GCC":"A|Ala", 
              "GCA":"A|Ala","GCG":"A|Ala", "GAT":"D|Asp","GAC":"D|Asp","GAA":"E|Glu", 
              "GAG":"E|Glu","GGT":"G|Gly","GGC":"G|Gly","GGA":"G|Gly","GGG":"G|Gly"} 
 
seq = "TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATATA" 
a="" 
 
for y in range( 0, len ( seq)): 
    c=(seq[y:y+3]) 
    #print(c) 
    for  k, v in dict.items(): 
        if seq[y:y+3] == k: 
            alle_amino = v[::3] #alle aminozuren op rijtje, a1.1 -a2.1- a.3.1-a1.2 enzo 
            print (v) 

使用此脚本,我可以从彼此下方的 3 个帧中获取氨基酸,但我如何对其进行排序并获取彼此相邻的第 1 帧中的所有氨基酸,以及彼此相邻的第 2 帧中的所有氨基酸其他,第3帧也一样吗?

例如,我的结果必须是:

+3 SerIleLeuAlaStpProLysTrpGluProProTyrValAlaStpProIleTyrIleTyrTle

+2 PheAsnThrSerMetThrLysValGlyThrProLeuArgSerMetThrHisIleTyrIleTyr

+1 PheGlnTyrStpHisAspGlnSerGlyAsnProLeuThrStpHisAspProTyrIleTyrIle

TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATA

我使用 Python 3。

i had one more question : can i make this results by some changes in mine own script ?

请您参考如下方法:

您可以使用(请注意,使用 biopython 翻译方法会简单得多):

dictio = {your dictionary here} 
 
def translate(seq): 
    x = 0 
    aaseq = [] 
    while True: 
        try: 
            aaseq.append(dicti[seq[x:x+3]]) 
            x += 3 
        except (IndexError, KeyError): 
            break 
    return aaseq 
 
seq = "TTTCAATACTAGCATGACCAAAGTGGGAACCCCCTTACGTAGCATGACCCATATATATATATATA" 
 
for frame in range(3): 
    print('+%i' %(frame+1), ''.join(item.split('|')[1] for item in translate(seq[frame:]))) 

请注意,我用 dicti 更改了您的字典的名称(不是为了覆盖 dict)。


一些帮助您理解的注释:

translate 获取序列并以列表的形式返回它,其中每个项目对应于编码该位置的三联体的氨基酸翻译。喜欢:

aaseq = ["L|Leu","L|Leu","P|Pro", ....] 

您可以在 translate 中处理更多此数据(仅获取一个或三个字母的代码),或者像我所做的那样返回它以供稍后处理。

translate 在

中被调用
''.join(item.split('|')[1] for item in translate(seq[frame:])) 

对于每一帧。对于帧值为 0、1 或 2 的情况,它会发送 seq[frame:] 作为参数进行翻译。也就是说,您正在发送对应于三个不同阅读框的序列,依次处理它们。然后,在

   ''.join(item.split('|')[1] 

我将每个氨基酸的单字母代码和三字母代码分开,并取索引 1 处的代码(第二个)。然后将它们连接成一个字符串