求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))