2012-12-12 45 views
1

我修改如下一段代碼來解析從BLAST XML輸出期望的信息。解析僅頂端從BLAST輸出3命中與NCBIXML

import csv 
from Bio.Blast import NCBIXML 
blast_records = NCBIXML.parse(open('PGblast.xml', 'rU')) 

output = csv.writer(open('PGhit.csv','w'), delimiter =',', 
        quoting=csv.QUOTE_NONNUMERIC) 
output.writerow(["Query","Hit ID", "Hit Def", "E-Value"]) 

E_VALUE_THRESH = 0.00000000000000001 

for blast_record in blast_records: 
    for alignment in blast_record.alignments: 
     for hsp in alignment.hsps: 
      if hsp.expect < E_VALUE_THRESH: 
       output.writerow([blast_record.query[:8], 
           alignment.hit_id, alignment.hit_def,hsp.expect]) 

blast_records.close() 

該代碼允許我解析E值切斷的命中。但是,我希望解析一下,因爲BLAST輸出文件的大小很大,所以我們只說BLAST XML輸出中的最佳匹配或前3個匹配。

有分析將需要大量的時間來處理每一擊的結果,我不想其實全部命中結果。

可能有人好心幫我嗎?

+0

我不明白,你想要頂級3的電子價值,但不想分析整個文件? –

+0

也許我不清楚我的問題,對不起。我希望解析BLAST輸出文件中每個查詢的最佳命中或最佳3次命中。 –

+0

我沒有得到的是您可以根據其內容過濾條目,而無需以某種方式解析每條記錄。 –

回答

1

只解析每一擊的前3 HSP不用解析整個文件,就需要你寫自己的自定義XML解析器。 Biopython的NCBIXML不會這樣做。

但是,如果這是你要找的提高速度,你可以嘗試新的SearchIO的子模塊(http://biopython.org/wiki/SearchIO)。它有一個新的BLAST XML解析器,它應該比舊的NCBIXML解析器更快。舊的解析器依賴於純Python的XML解析器,而SearchIO中的新解析器儘可能使用cElementTree

子模塊仍然是新的,實驗性的,所以有可能仍然會有一些改變它擊中的正式發佈之前。如果您有興趣,這裏還有一個草稿教程:http://bow.web.id/biopython/Tutorial.html#htoc96

+0

謝謝,鞠躬。謝謝你的帽子小費。 我在教程上做了一個快速閱讀,就像我在這裏試圖尋求指導或建議的那樣,「切片前三個點擊」。我會徹底閱讀該部分。 –

+0

不客氣。請注意,即使在「切片前三個匹配」示例中,SearchIO解析器也將解析整個文件。如果最終出現任何問題,請通過您的問題轉到Biopython郵件列表(http://biopython.org/wiki/Mailing_lists)。 – bow