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