仅使用制表符分隔符替换某些行结尾

时间:2017-03-04 01:14:34

标签: python python-2.7 fasta

我目前有一个FASTA文件,里面有几个DNA序列。

描述符之间的行替代:“> \ w {4} \ d {6}” 还有一个DNA序列文件 - 一系列300多个随机大写的字母。

我试图使每个序列选项卡分隔,以便每个描述符和序列在一行上,由制表符分隔。以下是我的尝试:

from __future__ import print_function
import re
import sys

Fasta_seq = open(sys.argv[1])
for a_line in Fasta_seq:
  if re.search('^>.+', a_line):
     re.sub('.+\n', '.+\t', a_line)
     print(a_line, end='')
  else:
    re.sub('.+', '.+', a_line)
    print(a_line, end='\n')

但是,此代码似乎不会删除在描述符末尾结束的行。它只是向我返回完全相同的输出。

有没有人知道我在忽视什么?

1 个答案:

答案 0 :(得分:1)

我不确定你是在处理离开还是交织fasta,但是这个任务可以在没有正则表达式的情况下轻松完成(同样,使用4个空格缩进)。请尝试以下方法:

Fasta_seq = open(sys.argv[1])
output_file = open("outfile.txt", "w")

seq = ""

for a_line in Fasta_seq:

    if a_line.startswith(">"):

        # Do this only when a sequence has been populated
        if seq:
            output_file.write("{}\t{}\n".format(header, seq))

        header = a_line.strip()
        seq = ""

    else:
        seq += a_line.strip()

这应该在leave和interleave fasta输入中起作用