📜  Python 3 中的 DNA 到蛋白质

📅  最后修改于: 2021-10-22 03:28:29             🧑  作者: Mango

翻译理论:DNA ⇒ RNA ⇒ 蛋白质

生命取决于细胞储存、检索和翻译遗传指令的能力。这些指令是制造和维持生物体所必需的。长期以来,尚不清楚哪些分子能够复制和传递遗传信息。我们现在知道,这些信息是由所有生物的双氧核糖核酸或 DNA 携带的。
DNA: DNA 是一种离散代码,物理上存在于生物体的几乎每个细胞中。我们可以把DNA作为四个字符可供选择字符的一个维字符串。这些字符是 A、C、G 和 T。它们代表用于构建 DNA 的四个核苷酸的第一个字母。这些核苷酸的全名是腺嘌呤、胞嘧啶、鸟嘌呤和胸腺嘧啶。每个独特的三字符核苷酸序列,有时称为核苷酸三联体,对应一个氨基酸。每种蛋白质的氨基酸序列都是独一无二的,所有蛋白质都是由所有生物的同一组仅 20 个氨基酸构成的。

DNA 中的指令首先被转录成 RNA,然后 RNA 被翻译成蛋白质。我们可以把 DNA 看作是由三个字母组成的序列,就像一本生命词典。
目标:将给定的 DNA 序列转换为其蛋白质等价物。
来源:从 NCBI 的基于 Web 的公共 DNA 序列存储库下载文本文件形式的 DNA 链。核苷酸样本为 (NM_207618.2),可在此处找到。下载文件:

步骤:将 DNA 序列转换为氨基酸序列所需的步骤是:

1. Code to translate the DNA sequence to a sequence of Amino acids where each Amino acid is
   represented by a unique letter.
2. Download the Amino acid sequence from NCBI to check our solution.

编码翻译

第一步是将原始未更改的 DNA 序列文本文件放入工作路径目录。在Python shell 中检查您的工作路径目录,

>>>pwd

接下来,我们需要在Python打开文件并读取它。默认情况下,文本文件包含一些未格式化的隐藏字符。这些隐藏字符如“/n”或“/r”需要格式化和删除。所以我们使用replace()函数,从原始txt文件中获取修改后的DNA序列txt文件。

inputfile ="DNA_sequence_original.txt"
f = open(inputfile, "r")
seq = f.read()
   
seq = seq.replace("\n", "") 
seq = seq.replace("\r", "")

接下来,我们将构建一个名为 translate() 的函数,它将改变的 DNA 序列转换为它的蛋白质等价物并返回它。我们将修改后的 DNA 序列作为函数的参数。

def translate(seq):
       
    table = {
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                 
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
        'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
        'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W',
    }
    protein =""
    if len(seq)%3 == 0:
        for i in range(0, len(seq), 3):
            codon = seq[i:i + 3]
            protein+= table[codon]
    return protein

上面代码中的表格供参考,可以在生物学手册中找到。由于称为密码子的三联核苷酸形成单个氨基酸,因此我们检查更改的 DNA 序列是否可以被 3 in ( if len(seq)%3 == 0: ) 整除。接下来,代码是不言自明的,我们在其中形成密码子并将它们与表中的氨基酸匹配。 Atlast,我们形成氨基酸序列,也称为蛋白质,并返回它。
最后一步是将我们的氨基酸序列与在 NCBI 网站上找到的原始序列相匹配。我们将通过字符比较两种Python中的氨基酸序列,字符,如果这两个是完全一样的副本返回true。
首先下载未改变的氨基酸序列txt文件,用Python打开。我们将构建一个名为 read_seq() 的函数来删除不需要的字符并形成更改后的氨基酸序列 txt 文件。

def read_seq(inputfile):
    with open(inputfile, "r") as f:
        seq = f.read()
    seq = seq.replace("\n", "")
    seq = seq.replace("\r", "")
    return seq

最后一步是比较两个文件并检查两者是否相同。如果输出为,我们就成功地将 DNA 翻译成蛋白质。

最终代码

# Python program to conver
# altered DNA to protein
  
inputfile ="DNA_sequence_original.txt" 
f = open(inputfile, "r")
seq = f.read()
  
seq = seq.replace("\n", "") 
seq = seq.replace("\r", "")
  
def translate(seq):
      
    table = {
        'ATA':'I', 'ATC':'I', 'ATT':'I', 'ATG':'M',
        'ACA':'T', 'ACC':'T', 'ACG':'T', 'ACT':'T',
        'AAC':'N', 'AAT':'N', 'AAA':'K', 'AAG':'K',
        'AGC':'S', 'AGT':'S', 'AGA':'R', 'AGG':'R',                 
        'CTA':'L', 'CTC':'L', 'CTG':'L', 'CTT':'L',
        'CCA':'P', 'CCC':'P', 'CCG':'P', 'CCT':'P',
        'CAC':'H', 'CAT':'H', 'CAA':'Q', 'CAG':'Q',
        'CGA':'R', 'CGC':'R', 'CGG':'R', 'CGT':'R',
        'GTA':'V', 'GTC':'V', 'GTG':'V', 'GTT':'V',
        'GCA':'A', 'GCC':'A', 'GCG':'A', 'GCT':'A',
        'GAC':'D', 'GAT':'D', 'GAA':'E', 'GAG':'E',
        'GGA':'G', 'GGC':'G', 'GGG':'G', 'GGT':'G',
        'TCA':'S', 'TCC':'S', 'TCG':'S', 'TCT':'S',
        'TTC':'F', 'TTT':'F', 'TTA':'L', 'TTG':'L',
        'TAC':'Y', 'TAT':'Y', 'TAA':'_', 'TAG':'_',
        'TGC':'C', 'TGT':'C', 'TGA':'_', 'TGG':'W',
    }
    protein =""
    if len(seq)%3 == 0:
        for i in range(0, len(seq), 3):
            codon = seq[i:i + 3]
            protein+= table[codon]
    return protein
def read_seq(inputfile):
    with open(inputfile, "r") as f:
        seq = f.read()
    seq = seq.replace("\n", "")
    seq = seq.replace("\r", "")
    return seq
  
prt = read_seq("amino_acid_sequence_original.txt")
dna = read_seq("DNA_sequence_original.txt")
  
  
p = translate(dna[20:935])
p == prt 

输出:

参考 :

  • edX –HarvardX – 使用Python进行研究