【发布时间】:2017-03-04 09:24:56
【问题描述】:
我目前有一个 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')
但是,这段代码似乎并没有删除在我的描述符末尾结束的行。它只是返回给我完全相同的输出。
有人知道我忽略了什么吗?
【问题讨论】:
-
在
for a_line in Fasta_seq:之后,在if行之前添加一个缩进的a_line = a_line.strip()。还要删除else子句中print上的end='\n'。 -
你在 Windows 上吗?
-
是的,我正在运行 Windows 7。
-
@Martineau 看来您的代码有效。但是,描述符后面的选项卡没有出现,因为我认为它会出现在“if”语句中。你能明白为什么吗?就好像我的 re.sub 函数不起作用一样。
-
a_line.strip()在读取的每一行末尾删除换行符,因此没有尾随\n匹配。坦率地说,我根本不知道您为什么要使用re。剥离线路后,只需检查线路是否以'>'开头。如果是,则使用end='\t'打印,如果不是,则正常打印(使用默认的end='\n')。
标签: python python-2.7 fasta