-1
我需要創建一個程序,可以將一些文本文件稱爲fasta文件並將其轉換爲sequence_name,Domain_names,Domain of Domain,Domain 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
這裏是輸出以獲取更多信息的能解密:
- MICE_8是第一序列的名字uence在FASTA文件
- GNL | CDD | 256537是第一個蛋白質結構域
- 819這是在域統計
- 923這是在哪裏結束
- GNL的名稱| CDD | 260076是第一個序列的第二個蛋白質結構域的名稱等等,它從111開始並在位置189結束。
此外,由於最後的序列沒有得到命中,程序仍然需要顯示序列的名稱。所以這裏
OK是到目前爲止我的代碼和它所輸出到目前爲止
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))
這裏是我的輸出看起來像至今:
[email protected]:~$ ./Domainfinder.py bioinformation.fasta
MICE_8 gnl|CDD|256537 819 923gnl|CDD|260076 111 189gnl|CDD|260056 4 93
我創建的程序是幾乎到了要求的規格。 *只有3個問題,*必須要解決以下問題:
- 存在這樣的情況我運行程序和結果之間的額外空間
- 我的程序不會寫出具有零次命中的序列名稱
- 我的程序沒有用空格分隔域名。
正確的輸出應該是這樣的
[email protected]:~$ ./Domainfinder.py bioinformation.fasta
MICE_8 gnl|CDD|256537 819 923 gnl|CDD|260076 111 189 gnl|CDD|260056 4 93
MICE_59
應該第二個序列(從'> MICE_59'開始不在自己的行嗎? 另外,這是python,所以我建議你看一下'print'命令而不是sys.stdout,並查看字符串格式(看教程[這裏](https://pyformat.info/) – nbryans
謝謝,打印命令修復了很多間距問題,我最終解決了這個問題,我不知道使用sys的習慣在哪裏。 stdout來自於你知道我的教授的名字是布萊恩誠實地說,如果你是他,那真是個巧合。 –