Python在生物学领域的简单应用——处理DNA序列
DNA的反向互补序列
假设我们有一串DNA序列,存在一个名为“dna.txt”的文本文档中。那么,我们该如何用Python输出它的反向序列、互补序列以及反向互补序列呢?
在这之前,我们不妨定义一个函数,用来打开并读取txt文件。我们把这个函数命名为read_seq(),这个函数的参数为我们的文件路径。需要注意的一点是,在dna.txt文件中,存在着换行符\n和回车符\r(如下图所示),而我们只需要用到代表碱基序列的大写字母。我们可以用replace()方法来替换掉它们。
最终,我们定义的read_seq()函数如下:
1 | def read_seq(inputfile): |
接下来,我们需要定义dna_complement(),dna_reverse()和dna_revcomp()三个函数。在定义dna_complement()函数的时候,和上面替换换行符和回车符同样的道理,我们可以用replace()方法来替换字符串中代表碱基的大写字母。而定义后两个函数明显容易得多,我们只需要让字符串反向输出就可以了。我们定义的dna_complement(),dna_reverse()和dna_revcomp()三个函数如下所示:
1 | def dna_complement(seq): |
1 | def dna_reverse(seq): |
1 | def dna_revcomp(seq): |
完整的代码如下所示:
1 | def dna_complement(seq): |
输出结果如下:
1 | GGTCAGAAAAAGCCCTCTCCATGTCTACTCACGATACATCCCTGAAAACCACTGAGGAAGTGGCTTTTCAGATCATCTTGCTTTGCCAGTTTGGGGTTGGGACTTTTGCCAATGTATTTCTCTTTGTCTATAATTTCTCTCCAATCTCGACTGGTTCTAAACAGAGGCCCAGACAAGTGATTTTAAGACACATGGCTGTGGCCAATGCCTTAACTCTCTTCCTCACTATATTTCCAAACAACATGATGACTTTTGCTCCAATTATTCCTCAAACTGACCTCAAATGTAAATTAGAATTCTTCACTCGCCTCGTGGCAAGAAGCACAAACTTGTGTTCAACTTGTGTTCTGAGTATCCATCAGTTTGTCACACTTGTTCCTGTTAATTCAGGTAAAGGAATACTCAGAGCAAGTGTCACAAACATGGCAAGTTATTCTTGTTACAGTTGTTGGTTCTTCAGTGTCTTAAATAACATCTACATTCCAATTAAGGTCACTGGTCCACAGTTAACAGACAATAACAATAACTCTAAAAGCAAGTTGTTCTGTTCCACTTCTGATTTCAGTGTAGGCATTGTCTTCTTGAGGTTTGCCCATGATGCCACATTCATGAGCATCATGGTCTGGACCAGTGTCTCCATGGTACTTCTCCTCCATAGACATTGTCAGAGAATGCAGTACATATTCACTCTCAATCAGGACCCCAGGGGCCAAGCAGAGACCACAGCAACCCATACTATCCTGATGCTGGTAGTCACATTTGTTGGCTTTTATCTTCTAAGTCTTATTTGTATCATCTTTTACACCTATTTTATATATTCTCATCATTCCCTGAGGCATTGCAATGACATTTTGGTTTCGGGTTTCCCTACAATTTCTCCTTTACTGTTGACCTTCAGAGACCCTAAGGGTCCTTGTTCTGTGTTCTTCAACTGTTGAAAGCCAGAGTCACTAAAAATGCCAAACACAGAAGACAGCTTTGCTAATACCATTAAATACTTTATTCCATAAATATGTTTTTAAAAGCTTGTATGAACAAGGTATGGTGCTCACTGCTATACTTATAAAAGAGTAAGGTTATAATCACTTGTTGATATGAAAAGATTTCTGGTTGGAATCTGATTGAAACAGTGAGTTATTCACCACCCTCCATTCTCT |
把DNA编码链转录为mRNA
我们同样通过定义函数的方式来实现DNA编码链的转录。根据生物学相关知识,我们只需要把DNA编码链的T替换成U即可得到mRNA(在此我们忽略DNA的启动子与终止子)。代码实现如下:
1 | def transcription(seq): |
根据DNA编码链序列或mRNA序列翻译出蛋白质序列
我们先来讨论根据DNA编码链翻译蛋白质。定义一个新函数dna_translate()。在定义函数的过程中,我们需要思考一个问题:众所周知,mRNA翻译蛋白质是从起始密码子开始翻译,到终止密码子停止翻译。如果不考虑这个问题的话很有可能会得到错误的结果。定义函数如下:
1 | import re |
完整代码如下:
1 | import re |
在上面程序的第43行print(dna_translate(dna)[:-1]),在最后加上[:-1]的目的是“删除”掉DNA序列末尾的_(下划线)。输出结果如下:
1 | GGTCAGAAAAAGCCCTCTCCATGTCTACTCACGATACATCCCTGAAAACCACTGAGGAAGTGGCTTTTCAGATCATCTTGCTTTGCCAGTTTGGGGTTGGGACTTTTGCCAATGTATTTCTCTTTGTCTATAATTTCTCTCCAATCTCGACTGGTTCTAAACAGAGGCCCAGACAAGTGATTTTAAGACACATGGCTGTGGCCAATGCCTTAACTCTCTTCCTCACTATATTTCCAAACAACATGATGACTTTTGCTCCAATTATTCCTCAAACTGACCTCAAATGTAAATTAGAATTCTTCACTCGCCTCGTGGCAAGAAGCACAAACTTGTGTTCAACTTGTGTTCTGAGTATCCATCAGTTTGTCACACTTGTTCCTGTTAATTCAGGTAAAGGAATACTCAGAGCAAGTGTCACAAACATGGCAAGTTATTCTTGTTACAGTTGTTGGTTCTTCAGTGTCTTAAATAACATCTACATTCCAATTAAGGTCACTGGTCCACAGTTAACAGACAATAACAATAACTCTAAAAGCAAGTTGTTCTGTTCCACTTCTGATTTCAGTGTAGGCATTGTCTTCTTGAGGTTTGCCCATGATGCCACATTCATGAGCATCATGGTCTGGACCAGTGTCTCCATGGTACTTCTCCTCCATAGACATTGTCAGAGAATGCAGTACATATTCACTCTCAATCAGGACCCCAGGGGCCAAGCAGAGACCACAGCAACCCATACTATCCTGATGCTGGTAGTCACATTTGTTGGCTTTTATCTTCTAAGTCTTATTTGTATCATCTTTTACACCTATTTTATATATTCTCATCATTCCCTGAGGCATTGCAATGACATTTTGGTTTCGGGTTTCCCTACAATTTCTCCTTTACTGTTGACCTTCAGAGACCCTAAGGGTCCTTGTTCTGTGTTCTTCAACTGTTGAAAGCCAGAGTCACTAAAAATGCCAAACACAGAAGACAGCTTTGCTAATACCATTAAATACTTTATTCCATAAATATGTTTTTAAAAGCTTGTATGAACAAGGTATGGTGCTCACTGCTATACTTATAAAAGAGTAAGGTTATAATCACTTGTTGATATGAAAAGATTTCTGGTTGGAATCTGATTGAAACAGTGAGTTATTCACCACCCTCCATTCTCT |
类似地,我们可以把上面几个程序综合一下,实现“DNA—(转录)→mRNA—(翻译)→蛋白质”的完整过程。代码如下:
1 | import re |
写在最后
如果你有什么更好的想法,欢迎给我留言。
我的邮箱:1398635912@qq.com