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

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top