Python在生物学领域的简单应用——处理DNA序列

DNA的反向互补序列

  假设我们有一串DNA序列,存在一个名为“dna.txt”的文本文档中。那么,我们该如何用Python输出它的反向序列、互补序列以及反向互补序列呢?
  在这之前,我们不妨定义一个函数,用来打开并读取txt文件。我们把这个函数命名为read_seq(),这个函数的参数为我们的文件路径。需要注意的一点是,在dna.txt文件中,存在着换行符\n和回车符\r(如下图所示),而我们只需要用到代表碱基序列的大写字母。我们可以用replace()方法来替换掉它们。
Alt
  最终,我们定义的read_seq()函数如下:

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

  接下来,我们需要定义dna_complement()dna_reverse()dna_revcomp()三个函数。在定义dna_complement()函数的时候,和上面替换换行符和回车符同样的道理,我们可以用replace()方法来替换字符串中代表碱基的大写字母。而定义后两个函数明显容易得多,我们只需要让字符串反向输出就可以了。我们定义的dna_complement()dna_reverse()dna_revcomp()三个函数如下所示:

def dna_complement(seq):
    seq = seq.upper()
    seq = seq.replace('A', 'T')
    seq = seq.replace('T', 'A')
    seq = seq.replace('C', 'G')
    seq = seq.replace('G', 'C')
    return seq
def dna_reverse(seq):
    seq = seq.upper()
    return seq[::-1]
def dna_revcomp(seq):
    seq = seq.upper()
    return dna_complement(seq)[::-1]

  完整的代码如下所示:

def dna_complement(seq):
    seq = seq.upper()
    seq = seq.replace('A', 'T')
    seq = seq.replace('T', 'A')
    seq = seq.replace('C', 'G')
    seq = seq.replace('G', 'C')
    return seq


def dna_reverse(seq):
    seq = seq.upper()
    return seq[::-1]


def dna_revcomp(seq):
    seq = seq.upper()
    return dna_complement(seq)[::-1]


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


if __name__ == '__main__':
    dna = read_seq("E:\\python_pycharm\\一些Python程序练习\\DNA\\dna.txt")
    print(dna)                          # 原DNA序列
    print(dna_complement(dna))          # DNA互补序列
    print(dna_reverse(dna))             # DNA反向序列
    print(dna_revcomp(dna))             # DNA反向互补序列

  输出结果如下:

GGTCAGAAAAAGCCCTCTCCATGTCTACTCACGATACATCCCTGAAAACCACTGAGGAAGTGGCTTTTCAGATCATCTTGCTTTGCCAGTTTGGGGTTGGGACTTTTGCCAATGTATTTCTCTTTGTCTATAATTTCTCTCCAATCTCGACTGGTTCTAAACAGAGGCCCAGACAAGTGATTTTAAGACACATGGCTGTGGCCAATGCCTTAACTCTCTTCCTCACTATATTTCCAAACAACATGATGACTTTTGCTCCAATTATTCCTCAAACTGACCTCAAATGTAAATTAGAATTCTTCACTCGCCTCGTGGCAAGAAGCACAAACTTGTGTTCAACTTGTGTTCTGAGTATCCATCAGTTTGTCACACTTGTTCCTGTTAATTCAGGTAAAGGAATACTCAGAGCAAGTGTCACAAACATGGCAAGTTATTCTTGTTACAGTTGTTGGTTCTTCAGTGTCTTAAATAACATCTACATTCCAATTAAGGTCACTGGTCCACAGTTAACAGACAATAACAATAACTCTAAAAGCAAGTTGTTCTGTTCCACTTCTGATTTCAGTGTAGGCATTGTCTTCTTGAGGTTTGCCCATGATGCCACATTCATGAGCATCATGGTCTGGACCAGTGTCTCCATGGTACTTCTCCTCCATAGACATTGTCAGAGAATGCAGTACATATTCACTCTCAATCAGGACCCCAGGGGCCAAGCAGAGACCACAGCAACCCATACTATCCTGATGCTGGTAGTCACATTTGTTGGCTTTTATCTTCTAAGTCTTATTTGTATCATCTTTTACACCTATTTTATATATTCTCATCATTCCCTGAGGCATTGCAATGACATTTTGGTTTCGGGTTTCCCTACAATTTCTCCTTTACT
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值