2017-01-10 3 views
0

У меня есть рабочий код, который выполняет BLAST на сервере ncbi, а затем возвращает последовательности в формате 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() является ручка на входной поток StringIO, который можно непосредственно передать в NCBIXML.parse().

Смежные вопросы