2017-01-10 119 views
0

我有一個工作代碼,它在ncbi服務器上執行BLAST,然後以xml格式返回序列。它正在工作,但我想避免製作新文件並直接在終端上打印BLAST結果。這是否有一個很好的解決方案呢?我粘貼在我的代碼下面,這是工作,但它正在創建一個新的文件。使用biopython創建沒有創建任何文件的文件

result_handle = NCBIWWW.qblast(
"blastx", 
"nr", 
sequences, 
entrez_query = organism) 

save_file = open("BLAST.xml", "w") 
save_file.write(result_handle.read()) 
save_file.close() 

result_handle.close() 

result = open("BLAST.xml", "r") 
records = NCBIXML.parse(result) 

for i, record in enumerate(records): 
    if record.alignments == []: 
     print ("There is no BLAST result") 
    else: 
     for align in record.alignments: 
      print (align.hit_id) 
      break 

我想要做這樣的事情:

result = result_handle.read() 
record = NCBIXML.parse(result) 
for i, record in enumerate(record): 

但它無法正常工作。

謝謝您提前!

+2

*「它不工作」*不是有效的問題陳述。請編輯您的問題並解釋發生了什麼,包括任何錯誤或回溯的全文**。此外,請確保您的示例代碼是可以由任何人運行的[mcve],並且不依賴於以前定義的變量,如「序列」或「有機體」。您的進口報表也應包括在內。 – MattDMo

回答

0

我的信念是不是你希望的解決方案應該是更簡單:

result_handle = NCBIWWW.qblast("blastx", "nr", sequences, entrez_query=organism) 

records = NCBIXML.parse(result_handle) 

for i, record in enumerate(records): 
    if record.alignments: 
     for align in record.alignments: 
      print(align.hit_id) 
    else: 
     print("There is no BLAST result for", i) 

結果從NCBIWWW.qblast()是手柄上,你可以直接交給NCBIXML.parse()一個StringIO輸入流。