BioPython: извлечение идентификаторов последовательности из выходного файла Blast

У меня есть выходной файл BLAST в формате XML. Это 22 последовательности запросов, в каждой из которых сообщается о 50 совпадениях. И я хочу извлечь все хиты 50x22. Это код, который у меня сейчас есть, но он извлекает только 50 обращений из первого запроса.

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()

У кого-нибудь есть предложения, как извлечь все хиты? Думаю, мне нужно использовать что-то еще, кроме выравнивания. Надеюсь, это было понятно. Спасибо!

Джон


person Jon    schedule 05.11.2009    source источник
comment
Почему двойной пост? stackoverflow .com/questions/1684194/ час назад или около того?   -  person mjv    schedule 06.11.2009
comment
Поскольку большинство людей здесь, вероятно, не используют BioPython, вы можете получить больше ответов, если предоставите несколько полезных ссылок.   -  person John La Rooy    schedule 06.11.2009
comment
mjv: Предыдущее сообщение было о том, как сохранить вывод. Это примерно тот же код, но теперь я хочу его изменить. gnibbler: что значит полезные ссылки? Нравятся ссылки, чтобы помочь с ответом? Я проверял много ссылок. Как и документы по биопитонам, но проблема в том, что мне трудно читать такие документы.   -  person Jon    schedule 06.11.2009
comment
Вы забыли букву «L» в конце первой строки.   -  person xApple    schedule 22.05.2013


Ответы (2)


Это должно получить все записи. Новинкой по сравнению с оригиналом является

for blast_record in blast_records

который является идиомой Python для перебора элементов в объекте, похожем на список, таком как blast_records (проверка файла документация модуля CBIXML показала, что parse() действительно возвращает итератор)

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()
person mjv    schedule 06.11.2009

Я использовал этот код для извлечения всех результатов

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"

или для менее подробной информации

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"

я использовал этот сайт

http://www2.warwick.ac.uk/fac/sci/moac/currentstudents/peter_cock/python/rpsblast/

person Community    schedule 24.03.2010