我目前有一个 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/