2014-01-23 2 views
0

Я пытаюсь разобрать вывод BLAST в формате XML, используя re, никогда не делал этого раньше, ниже мой код.синтаксический разбор .xml с удаленным результатом с re

Однако, поскольку некоторые хиты Hsp_num иногда больше, чем один раз, я получаю больше результатов для query_from и query_to, и меньше для query_len, как указать, что если Hsp_num больше 1 сделать print query_len для него снова? благодарю вас

import re 
output = open('result.txt','w') 
n = 0 
with open('file.xml','r') as xml: 
    for line in xml: 
     if re.search('<Hsp_query-from>', line) != None: 
      line = line.strip() 
      line = line.rstrip() 
      line = line.strip('<Hsp_query-from>') 
      line = line.rstrip('</') 
      query_from = line 
     if re.search('<Hsp_query-to>', line) != None: 
      line = line.strip() 
      line = line.rstrip() 
      line = line.strip('<Hsp_query-to>') 
      line = line.rstrip('</') 
      query_to = line 
     if re.search('<Hsp_num>', line) != None: 
      line = line.strip() 
      line = line.rstrip() 
      line = line.strip('<Hsp_num>') 
      line = line.rstrip('</') 
      Hsp_num = line 
      print >> output, Hsp_num+'\t'+query_from+'\t'+query_to 
output.close() 

Я сделал query_len в отдельный файл, так как он не работал ..

with open('file.xml','r') as xml: 
    for line in xml: 
     if re.search('<Iteration_query-len>', line) != None: 
      line = line.strip() 
      line = line.rstrip() 
      line = line.strip('<Iteration_query-len>') 
      line = line.rstrip('</') 
      query_len = line 

ответ

2

Вы знакомы с Biopython? Его модуль Bio.Blast.NCBIXML может быть именно тем, что вам нужно. Chapter 7 учебника и поваренной книги - все о BLAST, а раздел 7.3 посвящен разбору. Вы получите представление о том, как это работает, и это будет намного проще, чем использовать регулярное выражение для анализа XML, что приведет только к слезам и mental breakdowns.

+0

спасибо, я посмотрел на эту главу, кажется, все равно сложно, я думаю, что собираюсь отказаться от разбора формата .XML и работать с табличным. Было просто интересно, возможно ли подобное с помощью re – user3224522

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