微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Biopython后解析BLAST结果的XML输出

如何解决使用Biopython后解析BLAST结果的XML输出

我有一个 FASTA 文件 (test.fasta),其中包含我使用 Biopython 与 BLASTN 对齐的许多序列。

import Bio
from Bio.Blast import NCBIWWW
from Bio.Blast import NCBIXML

sequence_data = open("/Users/Desktop/test.fasta").read()
result_handle = NCBIWWW.qblast("blastn","nt",sequence_data)
with open('results.xml','w') as save_file: 
blast_results = result_handle.read() 
save_file.write(blast_results)

对齐已保存为 xml 文件。 现在,我想解析 xml 文件输出,以获取发现匹配的所有物种列表的信息,并且可能我只想保留特定物种: 示例 xml:

  <Hit_num>1</Hit_num>
  <Hit_id>gi|2020514704|emb|FR989945.1|</Hit_id>
  <Hit_def>Plebejus argus genome assembly,chromosome: 19</Hit_def>
  <Hit_accession>FR989945</Hit_accession>
  <Hit_len>13381465</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_num>1</Hsp_num>
      <Hsp_bit-score>44.5672</Hsp_bit-score>
      <Hsp_score>48</Hsp_score>
      <Hsp_evalue>1.07773</Hsp_evalue>
      <Hsp_query-from>65</Hsp_query-from>
      <Hsp_query-to>99</Hsp_query-to>
      <Hsp_hit-from>12008397</Hsp_hit-from>
      <Hsp_hit-to>12008366</Hsp_hit-to>
      <Hsp_query-frame>1</Hsp_query-frame>
      <Hsp_hit-frame>-1</Hsp_hit-frame>
      <Hsp_identity>31</Hsp_identity>
      <Hsp_positive>31</Hsp_positive>
      <Hsp_gaps>3</Hsp_gaps>
      <Hsp_align-len>35</Hsp_align-len>
      <Hsp_qseq>ACTATCTTTTATTTAGATTAGGTTCAGTATCCCTC</Hsp_qseq>
      <Hsp_hseq>ACTATGTTTTATTT---TTAGGTTCAGTATCCCTC</Hsp_hseq>
  <Hit_num>2</Hit_num>
  <Hit_id>gi|1812775970|gb|CP048843.1|</Hit_id>
  <Hit_def>Crassostrea gigas strain QD chromosome 5</Hit_def>
  <Hit_accession>CP048843</Hit_accession>
  <Hit_len>60957391</Hit_len>
  <Hit_hsps>
    <Hsp>
      <Hsp_num>1</Hsp_num>
      <Hsp_bit-score>42.7638</Hsp_bit-score>
      <Hsp_score>46</Hsp_score>
      <Hsp_evalue>3.76165</Hsp_evalue>
      <Hsp_query-from>63</Hsp_query-from>
      <Hsp_query-to>95</Hsp_query-to>
      <Hsp_hit-from>42721025</Hsp_hit-from>
      <Hsp_hit-to>42720993</Hsp_hit-to>
      <Hsp_query-frame>1</Hsp_query-frame>
      <Hsp_hit-frame>-1</Hsp_hit-frame>
      <Hsp_identity>29</Hsp_identity>
      <Hsp_positive>29</Hsp_positive>
      <Hsp_gaps>0</Hsp_gaps>
      <Hsp_align-len>33</Hsp_align-len>
      <Hsp_qseq>ATACTATCTTTTATTTAGATTAGGTTCAGTATC</Hsp_qseq>
      <Hsp_hseq>ATACTGTATTTTGTTTAGATTAGGTTCAGTTTC</Hsp_hseq>

在这种情况下的预期输出

Plebejus argus genome assembly,chromosome: 19
Crassostrea gigas strain QD chromosome 5

我,另外我想保留例如在“Hit_def”行有智人的比赛,但我还没有弄清楚。
到目前为止,我已经写了这样的东西:

results_handle=open('results.xml')
   for record in NCBIXML.parse(results_handle):
    for alignment in record.alignments:
        for hit in alignment.hits:
            print(hit_def)

但是,我不断收到一些错误

ValueError: 关闭文件I/O 操作。

ValueError: 在句柄中找到多条记录

有什么建议吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。