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

 

转载于:https://www.cnblogs.com/nklzj/p/6850363.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值