我想从一个大型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
那么如何修改此脚本以打印前四个对齐的结果?期待回复,任何帮助将不胜感激。
答案 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]说alignments
是Alignment
个对象的列表。此示例采用列表中前四个元素的一部分。如果少于四个,它就会占用那里的任何东西。
[1] - http://biopython.org/DIST/docs/api/Bio.Blast.Record.Blast-class.html