我需要创建一个程序,它可以获取一些名为fasta文件的文本文件并将其转换为sequence_name,Domain_names,Domain of Domain,End Of Domain。
因此,fasta文件只是一个看起来像这样的文本文件
>MICE_8
ATTCGATCGATCGATTTCGATCGATCGATCGATCGGGATCGATCGATCGATCGATC
>MICE_59
ATTTTTCGGCATCGATAGCTAGCTAGCTAG
我的程序需要一个命令参数,这是一个fasta的文件名,并给出一个这样的输出:
MICE_8 gnl|CDD|256537 819 923 gnl|CDD|260076 111 189 gnl|CDD|260056 4 93
MICE_59
这里是输出的描述以获取更多信息:
此外,由于最后一个序列没有得到命中,程序仍然需要显示序列的名称。
好的,所以这是我到目前为止的代码以及到目前为止输出的内容
import sys
import os
fastaname = sys.argv[1]
rpsblastname = "rpsblast.out"
cmd = "rpsblast+ -db /home/bryan/data/cdd/cdd -query %s -outfmt 6 -evalue 0.05 > %s" % (fastaname,rpsblastname)
os.system(cmd)
handle = open(rpsblastname, "r")
seqname = ""
for line in handle:
linearr = line.split()
# seqname = linearr [0]
domain = linearr[1]
start = linearr[6]
end = linearr[7]
# If sequence name is the same as last time, don't print it
if seqname == linearr[0]:
sys.stdout.write("%s %s %s" % (domain, start, end))
# Otherwise do print the sequence name, and update seqname
else:
seqname = linearr[0]
print
sys.stdout.write("%s %s %s %s" % (seqname,domain,start,end))
这是我的输出到目前为止的样子:
mel@roswald:~$ ./Domainfinder.py bioinformation.fasta
MICE_8 gnl|CDD|256537 819 923gnl|CDD|260076 111 189gnl|CDD|260056 4 93
我创建的程序几乎达到了要求的规格。 *只有3个需要解决的问题:
正确的输出应该如下所示
mel@roswald:~$ ./Domainfinder.py bioinformation.fasta
MICE_8 gnl|CDD|256537 819 923 gnl|CDD|260076 111 189 gnl|CDD|260056 4 93
MICE_59
答案 0 :(得分:0)
解决了这个问题。主要需要做的是使用字典将序列名称保存为键而不是使用列表。由于字典是随机的,我们需要能够从字典中创建一个列表,以便在读取时对序列名称进行排序。我们还从rpsblast中提取序列名称。如果有人有任何问题请随时下午。