使用NCBIXML从BLAST输出中仅解析前3个命中

时间:2012-12-12 08:46:42

标签: python xml-parsing biopython blast

我修改了一段代码,用于解析BLAST XML输出中的所需信息。

import csv
from Bio.Blast import NCBIXML
blast_records = NCBIXML.parse(open('PGblast.xml', 'rU'))

output = csv.writer(open('PGhit.csv','w'), delimiter =',',
                    quoting=csv.QUOTE_NONNUMERIC)
output.writerow(["Query","Hit ID", "Hit Def", "E-Value"])

E_VALUE_THRESH = 0.00000000000000001

for blast_record in blast_records:
    for alignment in blast_record.alignments:
        for hsp in alignment.hsps:
            if hsp.expect < E_VALUE_THRESH:
                output.writerow([blast_record.query[:8],
                                 alignment.hit_id, alignment.hit_def,hsp.expect])

blast_records.close()

代码允许我解析具有E值切断的命中。但是,由于BLAST输出文件很大,我希望解析一下BLAST XML输出中的最佳命中或前三次命中。

解析每个命中结果将花费大量时间来处理,我不希望所有命中结果。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

仅解析每个Hit的前3个HSP,而不解析整个文件,需要您编写自己的自定义XML解析器。 Biopython的NCBIXML不会这样做。

但是,如果你正在寻找它的速度提升,你可以试试新的SearchIO子模块(http://biopython.org/wiki/SearchIO)。它有一个新的BLAST XML解析器,它应该比旧的NCBIXML解析器更快。旧的解析器依赖于纯Python XML解析器,而SearchIO中的新解析器尽可能使用cElementTree

子模块仍然是新的和实验性的,因此在它正式发布之前可能仍会有一些变化。如果您有兴趣,还可以在这里找到一个草稿:http://bow.web.id/biopython/Tutorial.html#htoc96