用re解析.xml blast输出

时间:2014-01-23 16:50:34

标签: python xml parsing blast

我正在尝试使用re解析XML格式的BLAST输出,以前从未这样做过,下面是我的代码。

但是,由于某些匹配有时会Hsp_num多次,因此query_fromquery_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  

1 个答案:

答案 0 :(得分:2)

您熟悉Biopython吗?它的Bio.Blast.NCBIXML模块可能就是您所需要的。 Tutorial and Cookbook的Chapter 7是关于BLAST的,第7.3节涉及解析。您将了解它是如何工作的,并且比使用正则表达式解析XML要容易得多,这只会导致眼泪和mental breakdowns