使用biopython提取前四个tblastn主题命中

时间:2013-12-16 14:15:58

标签: python biopython

我想从一个大型XML文件中提取前四个命中,该文件包含在我的本地核苷酸数据库中搜索多个蛋白质查询的tblastn结果。然而问题是我的blast设置有一些查询导致少于四次点击,所以当我运行这段代码时:

> from Bio.Blast import NCBIXML 
   with open('/home/edson/ungulate/tblastn_result_test_xml') as tblastn_file: 
>  tblastn_records = NCBIXML.parse(tblastn_file) 
       for tblastn_record in tblastn_records:
>         if tblastn_record.alignments:
>             print tblastn_record.alignments[0].title
>             print tblastn_record.alignments[0].hsps[0]
>             print tblastn_record.alignments[1].title
>             print tblastn_record.alignments[1].hsps[0]
>             print tblastn_record.alignments[2].title
>             print tblastn_record.alignments[2].hsps[0]
>             print tblastn_record.alignments[3].title
>             print tblastn_record.alignments[3].hsps[0]

它运行但经过一些运行后它说:

Traceback (most recent call last):   File
 "/home/edson/tblastn_parser_test.py", line 8, in <module>
     print tblastn_record.alignments[0].title IndexError: list index out of range

那么如何修改此脚本以打印前四个对齐的结果?期待回复,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

from Bio.Blast import NCBIXML

with open('/home/edson/ungulate/tblastn_result_test_xml') as tblastn_file: 
    tblastn_records = NCBIXML.parse(tblastn_file) 
    for tblastn_record in tblastn_records:
        for alignment in record.alignments[:4]:
            print alignment.title
            print alignment.hsps[0]

我不熟悉biopython,但文档[1]说alignmentsAlignment个对象的列表。此示例采用列表中前四个元素的一部分。如果少于四个,它就会占用那里的任何东西。

[1] - http://biopython.org/DIST/docs/api/Bio.Blast.Record.Blast-class.html