2017-01-10 5 views
0

ncbi 서버에서 BLAST를 수행중인 작업 코드가 있고 xml 형식의 시퀀스가 ​​반환됩니다. 그것은 작동하지만 새로운 파일을 만들고 BLAST 결과를 터미널에서 직접 인쇄하는 것을 피하고 싶습니다. 이것을하기위한 좋은 해결책이 있습니까? 내가 작동하는 코드 아래에 붙여 넣지 만 새 파일을 만듭니다. blopy 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]이고 'sequences'또는 'organism'과 같이 이전에 정의 된 변수에 의존하지 않는지 확인하십시오. 수입 명세서도 포함해야합니다. – MattDMo

답변

0

내 믿음은 당신이 바라고있어보다 해결책도 간단합니다입니다 : NCBIWWW.qblast()에서

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) 

결과는 직접 NCBIXML.parse()에 손으로 할 수있는 StringIO 입력 스트림 상에 핸들입니다.