求fasta文件中序列的反向序列

同样的名为read_1.fa 的fasta文件,里面有若干序列,如:

>@r1
TGAATGCGAACTCCGGGACGCTCAGTAATGTGACGATAGCTGAAAACTGTACGATAAACNGTACGCTGAGGGCAGAAAAAATCGTCGGGGACATTNTAAAGGCGGCGAGCGCGGCTTTTCCG
>@r2
NTTNTGATGCGGGCTTGTGGAGTTCAGCCGATCTGACTTATGTCATTACCTATGAAATGTGAGGACGCTATGCCTGTACCAAATCCTACAATGCCGGTGAAAGGTGCCGGGATCACCCTGTGGGTTTAT
>@r3
ATCGCCCGCAGACACCTTCACGCTGGACTGTTTCGGCTTTTACAGCGTCGCTTCATAATCCTTTTTCGCCGCCGCCATCAGCGTGTTGTAATCCGCCTGCAGGATTTTCCCGTCTTTCNGTGCCTTGNT
..........等等

第一种方法,利用切片,reverse_seq.py代码如下:

 1 #encoding = utf-8
 2 
 3 """
 4 简介:求fasta文件中每个序列的反向序列
 5 作者:刘自军
 6 date:2017年5月20:26
 7 """
 8 import sys
 9 from collections import OrderedDict
10 
11 args = sys.argv
12 
13 reverse_seq = OrderedDict()
14 
15 with open(args[1]) as f:
16 
17     for line in f:
18         
19         line = line.strip('\n')
20 
21         if line.startswith('>'):
22             seq_id = line
23             reverse_seq[seq_id] = ''
24         else:
25             reverse_seq[seq_id] = line[::-1]
26             #[::-1]代表从后向前取值,每次步进值为1
27 
28 for ID,seq in reverse_seq.items():
29     print ('%s\n%s'%(ID,seq))
30 
31     #print (' %s\n 3\'%s5\' ' %(ID,seq))

 或者:

 1 #encoding = utf-8
 2 
 3 """
 4 简介:求fasta文件中每个序列的反向序列,利用切片的方法,不事先定义字典,代码更简洁
 5 作者:刘自军
 6 date:2017年5月13日17:23
 7 """
 8 
 9 import sys
10 
11 args = sys.argv
12 
13 with open(args[1]) as f:
14 
15     while True:
16         line_1 = f.readline().strip('\n')
17         if not line_1:
18             break
19         line_2 = f.readline().strip('\n').upper()
20         line_2 = line_2[::-1]
21 
22         print (line_1)
23         print ('3\''+ line_2 + '5\'')

 

 

第二种方法,利用reversed,reverse_seq.py代码如下:

 1 #encoding = utf-8
 2 
 3 """
 4 简介:求fasta文件中每个序列的反向序列,利用reversed()函数
 5 作者:刘自军
 6 date:2017年5月20:26
 7 """
 8 import sys
 9 from collections import OrderedDict
10 
11 args = sys.argv
12 
13 reverse_seq = OrderedDict()
14 
15 with open(args[1]) as f:
16 
17     for line in f:
18         
19         line = line.strip('\n')
20 
21         if line.startswith('>'):
22             seq_id = line
23             reverse_seq[seq_id] = ''
24         else:
25             reverse_seq[seq_id] = list(reversed(line))
26             #reversed()函数返回的是一个迭代器,而不是一个list,不用用list函数转换一下。
27 
28 for ID,seq in reverse_seq.items():
29     print ('%s\n%s'%(ID,seq))
30 
31     #print ('%s\n 3\' %s 5\'' %(ID,seq))

 

posted @ 2017-05-13 20:57  Bio-Liu  阅读(881)  评论(0编辑  收藏  举报