2017-04-15 134 views
-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個問題,*必須要解決以下問題:

  1. 存在這樣的情況我運行程序和結果之間的額外空間
  2. 我的程序不會寫出具有零次命中的序列名稱
  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 
+0

應該第二個序列(從'> MICE_59'開始不在自己的行嗎? 另外,這是python,所以我建議你看一下'print'命令而不是sys.stdout,並查看字符串格式(看教程[這裏](https://pyformat.info/) – nbryans

+1

謝謝,打印命令修復了很多間距問題,我最終解決了這個問題,我不知道使用sys的習慣在哪裏。 stdout來自於你知道我的教授的名字是布萊恩誠實地說,如果你是他,那真是個巧合。 –

回答

0

解決的問題。主要需要做的是使用字典來保存序列名稱作爲關鍵字而不是使用列表。因爲詞典是隨機的,所以我們需要能夠從字典中創建一個列表來排列序列名稱。我們也從rpsblast中提取序列名稱。如果有人有任何問題,歡迎下午。