Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用NCBIXML仅解析BLAST输出中的前3个命中_Python_Xml Parsing_Biopython_Blast - Fatal编程技术网

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

Python 使用NCBIXML仅解析BLAST输出中的前3个命中,python,xml-parsing,biopython,blast,Python,Xml Parsing,Biopython,Blast,我修改了一段代码,如下所示,以解析blastxml输出中所需的信息 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.w

我修改了一段代码,如下所示,以解析blastxml输出中所需的信息

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()
导入csv
从Bio.Blast导入NCBIXML
blast_records=NCBIXML.parse(open('PGblast.xml','rU'))
output=csv.writer(打开('PGhit.csv','w'),分隔符=',',
quoting=csv。QUOTE(非数字)
output.writerow([“查询”、“命中ID”、“命中定义”、“E值”])
E_值_阈值=0.00000000000000001
对于blast_记录中的blast_记录:
对于blast_记录中的对齐。对齐:
对于alignment.hsps中的hsp:
如果hsp.expect
代码允许我解析带有E值截断的命中。但是,我希望解析blastxml输出中的最佳命中率或前3个命中率,因为BLAST输出文件的大小很大

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


有人能帮我吗?

只解析每个命中的前3个HSP,而不解析整个文件,需要您编写自己的自定义XML解析器。Biopython的NCBIXML并没有做到这一点

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


子模块仍然是新的和实验性的,所以在正式发布之前可能还有一些变化。如果您感兴趣,这里还有一个教程草稿:。

我不明白,您想要e值排名前三,但不想解析整个文件?可能我的问题不清楚,对不起。我希望解析BLAST输出文件中每个查询的最佳命中率或最佳3次命中率。我不知道的是,您可以根据内容筛选条目,而无需以某种方式解析每条记录。@LevLevitsky,我认为KJ Lim希望每条BLAST_记录的前3次对齐。因此,您必须决定如何对所有路线的HSP进行称重,排序并选择前3位…@deinonychusaur您是对的。我想要每个blast_记录的前3个点击对齐(0,1,2),或者换句话说,将前三个点击切分。我有77k+blast_记录要解析,每个blast_记录有10个命中结果。因此,我想从每一张blast_唱片中选出前三名。谢谢,鲍。谢谢你的帽子小费。我快速阅读了教程,类似于“前三首歌曲的片段”是我试图在这里寻求指导或建议的内容。我会把那一节通读一遍,不客气。请注意,即使在“切片前三次点击”示例中,SearchIO解析器也已经解析了整个文件。如果您遇到任何问题,请转到Biopython邮件列表()并提出您的问题:)。