python实现根据序列ID从提取fasta文件序列

说实话,我平时用另一个perl脚本多一点


当序列少的时候,我习惯用 grep -A 1 -f seq.lst seq.fas | sed ‘/^–$/d’ > out.fas提取,但是这次遇到了一个大文件,用grep就太费时了,然后又试了一下TBtools的提取序列功能,发现时间也很长,所以就写了个python。提取将近100万条reads耗时也就需要10s左右

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Usage: python script.py lstFile seqFile outfile
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("lstFile", help="input a list file", type=str)
parser.add_argument("seqFile", help="input a sequence file", type=str)
parser.add_argument("outfile", help="output a file", type=str)
args = parser.parse_args()
lst = args.lstFile
seq = args.seqFile
out = args.outfile

frLst = open(lst, 'r')
frSeq = open(seq, 'r')
fwOut = open(out, 'w')

query = []
database = {}
for i in frLst.readlines():
    query.append(i.strip())
for i in frSeq.readlines():
    if i.startswith('>'):
        keys = i.lstrip('>').strip()
        database[keys] = []
    else:
        database[keys].append(i.strip())
for line in query:
    fwOut.write('>' + str(line) + '\n' + str(''.join(database[line])) + '\n')
fwOut.close()
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值