这次使用的是 biopython 中解析 blast 结果的功能,随着 blast 版本的不断更新, blast的输出结果的格式也在不断改变,所以这对于 biopython 解析 blast 的结果造成了很大影响,所以 biopython 中一般倾向于处理 xml 格式的 blast 输出结果,因为这种结果的格式一般不随 blast 版本的改变而改变。在进行 blast 的时候需要选择参数 -outfmt 5 即 xml 格式。在使用 biopython 时,加载包的代码是:from Bio.Blast import NCBIXML

NCBIXML 就是 biopython 中针对解析 xml 格式 blast 结果的子包,要解析结果,同平时的读取文件一样,也需要一个 blast 结果文件的句柄,假设我们的结果文件叫’blast_result.xml’, 那么读取就是:result_handle = open(‘blast_result.xml’, ’r’)

有了这个句柄,我们就可以通过 biopython 对其进行各种处理了,首先, blasts 的结果是一条一条存在这个句柄文件里的,这时就要分情况讨论,在做 blast 的时候我们是用的一条序列去 blast 还是用的多条序列去 blast,如果是一条,那么在读取这个句柄的时候就可以用:blast_record = NCBIXML.read(result_handle)

如果是多条:blast_records = NCBIXML.parse(result_handle)

唯一的区别就是 read 和 parse 的区别,他们的原理都是一样的,即从句柄中提取结果。result_records 对象是一个迭代器,可以允许用户一个接一个的获得 blast 的结果(因为有多条序列)。一般采用 for 循环来挨个读取比对结果:for blast_record in blast_records:

#do sth. with blast_record

现在,所有有关与 blast 结果的信息都被储存在一条条的 blast_record 中,那么如何提取这些信息?

blast_record 的结果可以分为三大类,调用不同的类可以得到相应的信息:descriptions、 alignments、 multiple_alignment。其中 descriptions 和 alignments 都是以 list 的形式来存储数据的。

·descriptions 下面有四个信息: title、 score、 e、 num_alignments,分别对应数据库中匹配上的序列的标题、匹配的得分、匹配的 e-value、以及多序列比对的数目。

·aligments 下面有三个信息: title、 length、 hsps,分别对应数据库中匹配上的序列的标题、匹配的长度、其中 hsps 是 list 格式的对象,里面储存了 query 和数据库中序列匹配的具体信息,包括匹配得分、 gap 等信息,详细的内容在后面的图片里。

·multiple_alignment 是多序列比对的结果,里面只储存了 alignment 的信息。有了这些具体的方法,在处理 blast 的结果时就不需要写额外的脚本了,只需要提取相关的记录然后进行具体操作就可以了。

同样, biopython 的另一个子包 SearchIO 也可以完成一些类似的工作,而且对于比较简单的需求, SearchIO 的代码相对更加简洁。调用代码:from Bio import SearchIO

和 NCBIXML 不同的是, SearchIO 在获取 blast 结果文件的时候使用的代码是:blast_results = SearchIO.parse(‘blast_result.xml’,’blast-xml’)

这个方法不需要先用 open 获得句柄,然后再对句柄进行处理, SearchIO 得到的对象直接就是可以进行各种操作的可迭代对象,这里, read 和 parse 的使用和 NCBIXML 中类似。有了这个对象,就可以提取对象中的各个信息,比如想知道具体是那一条序列和 blast 数据库中的序列比对上了,就可以使用 blast_result.id, id 就指的是具体序列的名字。如果我们想知道 blast 结果中那些序列比对上了,并且把比对上的序列名称存进一个列表进行后续操作,那么代码就是:#加载 SearchIO

from Bio import SearchIO

#建立用于存储比对上的序列的标题的列表

seq_name=[]

#使用 SearchIO 读取 blast 文件

blast_qresults = SearchIO.parse('blastx_result','blast-xml')

#假设我们使用的是很多序列来进行 blast,这里就使用 for 循环逐个读取每一条序列的比对结果

for blast_qresult in blast_qresults:

#blast_qresult 以列表形式存储比对的结果,如果没有比对上,那么列表长度即为 0,如果比对上了,比对上了多少条那么这里列表的长度就是多少。

if len(blast_qresult)  != 0:

#比对上的序列名称存进建好的列表

seq_name.append(blast_qresult.id)

biopython有什么用_用Biopython解析BLAST结果相关推荐

  1. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  2. QIIME2进阶一_用QIIME2解析序列,诠释生命

    本文旨在介绍生物信息学软件QIIME2及其核心组成. 2010年,美国科罗拉多大学的Rob Knight教授(现单位美国加州大学圣地亚哥分校)团队发布QIIME(发音同chime)分析流程.该流程可在 ...

  3. 只能输入字母的c语言程序设计教程课后答案,c语言程序设计基础教程_习题答案解析.doc...

    c语言程序设计基础教程_习题答案解析.doc 习题答案 第1章 填空题 应用程序ONEFUNC.C中只有一个函数,这个函数的名称是__main . 一个函数由__函数头__和__函数体__两部分组成. ...

  4. java课后习题七解析_《Java基础入门》_课后习题解析.doc

    <Java基础入门>_课后习题解析 <Java基础入门>课后习题 Java开发入门 一.填空题 1.Java的三大体系分别是_JavaSE_____._JavaEE_____. ...

  5. 单文件浏览器_图文并茂深度解析浏览器渲染原理,包看懂超值得收藏

    在我们面试过程中,面试官经常会问到这么一个问题,那就是从在浏览器地址栏中输入URL到页面显示,浏览器到底发生了什么?这个问题看起来是老生常谈,但是这个问题回答的好坏,确实可以很好的反映出面试者知识的广 ...

  6. python解析html的库_用python解析html

    python中,有三个库可以解析html文本,HTMLParser,sgmllib,htmllib.他们的实现方法不通,但功能差不多.这三个库中 提供解析html的类都是基类,本身并不做具体的工作.他 ...

  7. java json 内部类_使用Fastjson解析内部类的一个小问题

    使用的Fastjson的版本是1.2.7和1.2.47两个版本. 1. 问题 使用Fastjson解析包含内部类的对象时,发生异常,代码大致如下: public class HelloControll ...

  8. canal解析mysql日志异常_利用Canal解析mysql binlog日志

    一.安装包下载(canal.deployer-x.x.x.tar.gz  官方建议使用1.0.22版本) 二.解压文件 tar -zxvf canal.deployer-1.0.22.tar.gz - ...

  9. java解析字符串_用Java解析字符串有哪些不同的方法?

    用Java解析字符串有哪些不同的方法? 对于解析播放器命令,我最常使用split方法通过定界符对字符串进行分割,然后再通过一系列ifs或switches找出其余部分. Java中解析字符串的几种不同方 ...

  10. sql like 绑定变量_码硬解析的改进方法之二使用绑定变量

    绑定变量要求变量名称,数据类型以及长度是一致,否则无法使用软解析 绑定变量(bind variable)是指在DML语句中使用一个占位符,即使用冒号后面紧跟变量名的形式,如下 select * fro ...

最新文章

  1. 鸿蒙系统第五批公测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
  2. JSPatch Convertor 实现原理详解
  3. php 时分秒选择联动,微信小程序-年月日时分秒六级联动时间选择器
  4. flutter 几秒前, 几分钟前, 几小时前, 几天前...
  5. android bitmap drawable 互转
  6. kubernetes精华问答 | Swarm和K8S的共同点有哪些?
  7. 【第1章】初识MySQL
  8. 几个简约Jekyll主题推荐
  9. java高校选课系统博客,学生选课系统
  10. 自适应OCXO漂移校正算法(翻译)
  11. 二叉树 最小公共祖先 c++版
  12. 微信公众号上传文件附件教程
  13. 快速get进程、线程基础知识
  14. 【第四十三期】社招面经-后端开发 蚂蚁
  15. 一道笔试题:从1亿个整数中找出最大的一万个
  16. 360手机助手2016年度嗨APP全民榜入围名单
  17. 征文 | 收获,不止GBase 8a——GBase 8a培训总结与感受
  18. 案例分享——基于物联网的电能质量监测系统(各种基本电力参数、电网谐波、远程通信、监测终端、上位机)
  19. 记录一次支付宝接口对接遇到的问题
  20. .NET微服务迁移至.NET6.0的故事

热门文章

  1. 计算机考研复试面试系列 计算机专业英语篇
  2. ✿2020医疗行业CTF✿多余的音符
  3. [渝粤题库]西北工业大学离散数学
  4. Xcode8 官方下载地址
  5. java netbean_java NetBean创建及各菜单项相对应的窗体及布局教程.pdf
  6. mysql2000数据库四合一_sql2000四合一版下载|microsoft sql server2000 简体中文4合一版附sql 2000 sp4 补丁_ - 极光下载站...
  7. DragonFlow导读(by quqi99)
  8. Ubuntu速配指南之软件参考
  9. 制造企业发展遇瓶颈?低代码平台助其逆风翻盘!
  10. H.264 学习建议