自学生信Python(第九天)| 将 RNA 序列翻译为相应的蛋白质序列

将 RNA 序列翻译为相应的蛋白质序列

写在前面的话:
本人是一枚生物学的学生,由于对生物信息学特别感兴趣,于是想自学生物信息学(新手莫怪)
。了解到生物信息学要有编程基础,尤其是要会一门编程语言,例如:R语言、Python、Perl等,还要熟悉Linux系统,作为生信小白,听说Python挺简单的,于是就自学了Python,花了两天时间了解了Python的基础语法后,今天想做个练习题试试手(实践是检验真理的唯一标准),下面是练习题:(试题来源:《PYTHON生物信息学数据管理》)

假设有一条或更多 RNA 序列,读者想使用代表遗传密码的密码子表将它们翻译成相应 的蛋白质序列 。

这就需要从文件中读取 RNA 序列(在下文中称为"A06662_RNA. fasta") ,例如, FASTA 格式:

>A06662.1 Synthetic nucleotide seguence of the human GSH
transferase pi gene
UGGGACCAGUCAGCAGAGGCAGCGUGUGUGCGCGUGCGUGUGCGUGUGUGUGCGUGUGUGUG
UGUACGCUUGCAUUUGUGUCGGGUGGGUAAGGAGAUAGAGAUGGGCGGGCAGUAGGCCCAGG
UCCCGAAGGCCUUGAACCCACUGGUUUGGAGUCUCCUAAGGGCAAUGGGGGCCAUUGAGAAG
UCUGAA. . .

一次要读三个字符的 RNA 序列,对于每组三个字符(即密码子) ,相应的氨基酸必须能在遗传密码中找到,用于终止或截短密码子(分别是' * '和' - '的特殊字符也需要考虑。 每个阅读框都应重复这个过程,即:先从RNA序列的第一个核昔酸开始,然后从第二个开始,最后是第三个。实践程序时,读者需要查询大量的密码子:找到密码子对应到氨基酸。直觉来看,可以使用 for 循环来搜索密码子以及列表中相应的氨基酸:

genetic_code = [( 'GCU ' , 'A') , ('GCC' , ' A') ,…] 
for codon, amino_acid in genetic_code: 
if codon == triplet: 
  seq = seq + amino_ acid 

虽然这个搜索模式可以运行,但会非常没有效率。 如果序列很长,程序很快就会变得非常缓慢。
最好有一种数据结构,可以对一个遗传密码子的碱基三联体直接查找到相应的氨基酸,这样就可以特定地提取 {密码子:氨基酸} 的对应,而无须每次都遍历整个数据结构。
则脚本程序为:

codon_table = {'GCU':'A','GCC':'A','GCA':'A','GCG':'A',
                'CGU':'R','CGC':'R','CGA':'R','CGG':'R','AGA':'R','AGG':'R',
                'UCU':'S','UCC':'S','UCA':'S','UCG':'S','AGU':'S','AGC':'S',
                'AUU':'I','AUC':'I','AUA':'I','AUU':'I','AUC':'I','AUA':'I',
                'UUA':'L','UUG':'L','CUU':'L','CUC':'L','CUA':'L','CUG':'L',
                'GGU':'G','GGC':'G','GGA':'G','GGG':'G',
                'GUU':'V','GUC':'V','GUA':'V','GUG':'V',
                'ACU':'T','ACC':'T','ACA':'T','ACG':'T',
                'CCU':'P','CCC':'P','CCA':'P','CCG':'P',
                'AAU':'N','AAC':'N',
                'GAU':'D','GAC':'D',
                'UGU':'C','UGC':'C',
                'CAA':'Q','CAG':'Q',
                'GAA':'E','GAG':'E',
                'CAU':'H','CAC':'H',
                'AAA':'K','AAG':'K',
                'UUU':'F','UUC':'F',
                'UAU':'Y','UAC':'Y',
                'AUG':'M',
                'UGG':'W',
                'UAG':'STOP','UGA':'STOP','UAA':'STOP'}
RNA  = ''
for line in open('C:/Users/程云伟/Desktop/A06662_RNA.fasta'):
    #print(line)
    if not line.startswith('>'):
        RNA = RNA+line.strip()
        #print(RNA)
#translate one frame at a time
for frame in range(4):
    prot = ''
    print('Reading frame'+ str(frame + 1))
    for i in range(frame,len(RNA),3):
        codon = RNA[i:i+3]
        #print(codon)
        if codon in codon_table:
            if codon_table[codon] =='STOP':
                prot = prot +'*'
            else:
                prot = prot+codon_table[codon]
            #print(prot)
        else:
#handle too short codons
            prot = prot+'-'
#format to blocks of 48 columns
    i = 0
    while i < len(prot):
        print(prot[i:i+48])
        i = i+48

上面的脚本把遗传密码在字典中存储为{密码子:氨基酸}这样的对,读取 FASTA 文件的RNA序列作为字符串,然后翻译序列。该程序以三个字符(核苷酸三联体)为步长遍历了 RNA 字符串,并将每个核苷酸三联体替换为相应的氨基酸,将其添加至新的蛋白质字符串中,最终蛋白质字符串会打印到屏幕上,每个阅读框都会重复这些步骤。 打印 48 个氨基酸的输出块时,可以用 while 循环来代替 for 循环。 while 循环会执行一组语句,直到满足了给定的条件。 在上面的脚本中,条件是 i < len(prot) (直到整个序列被写入之前,该条件都会为 True) 。 但一旦索引变量 i 超过长度序列,条件就为 False, 并退出循环。

日常结尾:
虽然这是个小小的计算程序,但对于初学者的我来说每一次对原代码的升级改造,哪怕是读懂后的注释都感觉是一次进步提升,总之代码虽小,动手最重要!希望更多学习Python的爱好者不要像我一样眼高手低,学习编程就是要,思考,敲码,思考,敲码,敲码,再敲码!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 氨基酸是蛋白质的基本结构单位,参与合成蛋白质的氨基酸有20种,可作为原料在核糖体工厂通过肽键连接形成多肽链,都有密...
    官敏慧阅读 5,444评论 0 7
  • DNA是遗传物质,是携带遗传信息的载体。信息从基因的核苷酸序列中被提取出,用来指导蛋白质合成的过程对地球上的所有生...
    oddxix阅读 21,156评论 0 8
  • 他把厨师服往桌子上重重一摔 老子不干了 厨师长说,你不干地球照样转 他说,东方不亮西方亮 不在你这里干,老子也不会...
    隔着玻璃亲嘴阅读 274评论 0 1
  • 看了一下午 抽签。麻烦的 买个小公寓都买不成。浪费一下午。楼市疯成这样。关键还超贵。不知道咋整。
    松小鼠姐姐阅读 189评论 0 0