Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅用制表符分隔符替换某些行尾_Python_Python 2.7_Fasta - Fatal编程技术网

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

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

我现在有一个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()

这应该在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'
)。