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

标签 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')

但是,这段代码似乎并没有删除以我的描述符末尾结尾的行。它只是返回给我完全相同的输出。

有人知道我忽略了什么吗?

最佳答案

我不确定您是否正在处理leave或interleave 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输入

关于python - 仅用制表符分隔符替换某些行结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42590957/

相关文章:

python - 我可以避免 pandas 合并中右侧数据框的连接列出现在输出中吗?

ajax - Python2.7 通过请求获取iframe的内容

python - 将 fasta header 更改为 'similar to' 后的下一个单词

python - Unicode解码错误: 'ascii' codec can't decode byte 0xc5

awk - 有没有办法替换所有出现的某些字符,但只替换第 n 行?

python - 无法在 python 中使用 .strip() 剥离字符

python - ffmpeg 创建的 mp4 无法与 IPython.display.Video 一起播放

python - 在任务中访问 c​​elery worker 实例

python - 如何从列表中的每个项目中获取第一个字符并对其进行操作

python - 将模拟树的字典转换为列表