Python 仅用制表符分隔符替换某些行尾
我现在有一个FASTA文件,里面有几个DNA序列 描述符“>\w{4}\d{6}”之间的可选行 还有一个DNA序列文件——一行300多个随机大写字母 我试图将每个序列选项卡分隔开,以便每个描述符和序列位于一行上,由一个选项卡分隔。以下是我尝试过的:Python 仅用制表符分隔符替换某些行尾,python,python-2.7,fasta,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.se
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()
这应该在fasta seq:中的a_行的
之后的左行和交错fasta输入中起作用,在if
行之前添加一个缩进的a_行=a_行.strip()
。同时删除else
子句中print
上的end='\n'
。您在Windows上吗?是的,我正在运行Windows 7。@Martineau您的代码似乎工作正常。但是,描述符后面的选项卡并没有像我在“if”语句中假设的那样出现。你能理解为什么吗?几乎就好像我的re.sub函数不起作用一样。a_line.strip()
删除了读取的每行末尾的换行符,因此没有要匹配的尾随\n
。坦白地说,我根本不知道你为什么要用re
来做这个。剥离该行后,只需检查该行是否以'>'
开头。如果是,请使用end='\t'
打印,如果不是,请正常打印(使用默认的end='\n'
)。