Biopython: extrair IDs de sequência a partir de um arquivo de saída explosão
-
18-09-2019 - |
Pergunta
Eu tenho um arquivo de saída BLAST em formato XML. Ele é de 22 sequências de consulta com 50 batidas a partir de cada sequência de comunicados. E eu quero extrair todos os 50x22 hits. Este é o código que eu tenho atualmente, mas só extrai os 50 sucessos da primeira consulta.
from Bio.Blast import NCBIXM
blast_records = NCBIXML.parse(result_handle)
blast_record = blast_records.next()
save_file = open("/Users/jonbra/Desktop/my_fasta_seq.fasta", 'w')
for alignment in blast_record.alignments:
for hsp in alignment.hsps:
save_file.write('>%s\n' % (alignment.title,))
save_file.close()
Alguém tem alguma sugestão como para extrair todos os hits? Eu acho que eu tenho que usar algo mais do que alinhamentos. Espero que isso ficou claro. Obrigado!
Jon
Solução
Esta deve obter todos os registros. A novidade em comparação com o original é o
for blast_record in blast_records
que é uma linguagem python para percorrer itens em uma "lista-like" objeto, como os blast_records (verificando o CBIXML documentação do módulo mostrou que parse () na verdade retorna um iterador)
from Bio.Blast import NCBIXM
blast_records = NCBIXML.parse(result_handle)
save_file = open("/Users/jonbra/Desktop/my_fasta_seq.fasta", 'w')
for blast_record in blast_records:
for alignment in blast_record.alignments:
for hsp in alignment.hsps:
save_file.write('>%s\n' % (alignment.title,))
#here possibly to output something to file, between each blast_record
save_file.close()
Outras dicas
Eu usei esse código para extrair todos os resultados
from Bio.Blast import NCBIXML
for record in NCBIXML.parse(open("rpoD.xml")) :
print "QUERY: %s" % record.query
for align in record.alignments :
print " MATCH: %s..." % align.title[:60]
for hsp in align.hsps :
print " HSP, e=%f, from position %i to %i" \
% (hsp.expect, hsp.query_start, hsp.query_end)
if hsp.align_length < 60 :
print " Query: %s" % hsp.query
print " Match: %s" % hsp.match
print " Sbjct: %s" % hsp.sbjct
else :
print " Query: %s..." % hsp.query[:57]
print " Match: %s..." % hsp.match[:57]
print " Sbjct: %s..." % hsp.sbjct[:57]
print "Done"
ou para menos detalhes
from Bio.Blast import NCBIXML
for record in NCBIXML.parse(open("NC_003197.xml")) :
#We want to ignore any queries with no search results:
if record.alignments :
print "QUERY: %s..." % record.query[:60]
for align in record.alignments :
for hsp in align.hsps :
print " %s HSP, e=%f, from position %i to %i" \
% (align.hit_id, hsp.expect, hsp.query_start, hsp.query_end)
print "Done"
Eu usei esse site
http: //www2.warwick. ac.uk/fac/sci/moac/currentstudents/peter_cock/python/rpsblast/