利用Bioperl的SeqIO模块解析fastq文件
测序数据中经常会接触到fastq格式的文件,比如说拿到fastq格式的原始数据后希望查看测序碱基的质量并去除低质量碱基。一般而言大家都是用现有的工具,比如说fastqc这个Java写的小程序,确实很好用,运行速度快,检查的项目也多。有时候我们也需要对这些数据进行个性化的分析,那么这个时候这些小工具就不能胜任了,需要我们自己写程序(脚本)来处理。本人目前才疏学浅,因此只有一下三种方案:
1.完全自己写脚本,读取每一行,手动解析,然后实现个性化分析。(显然这个比较慢,相当于重造了一个转速很慢的轮子)
2.利用前人写好的工具,找出源码里面的核心解析程序,然后加以改进,实现个性化。(当然这个只能自己私下用用。这里推荐一个C语言的库 kseq.h,可以用来解析fasta/fastq格式的文件,底层语言运行速度非常快!)
3.利用Bioperl或者Biopython里面的工具解析文件,然后再写脚本个性化分析。(鉴于python的速度,这里推荐Bioperl)
下面具体介绍如何使用Bioperl的SeqIO模块解析fastq格式文件。
首先是安装Bioperl。
sudo apt-get install perlbrew sudo perlbrew install-cpanm sudo /path/cpanm Bio::Perl
解析 head10000.fastq 文件的前四行(第一条序列)。
#!/bin/perl -w
use Bio::SeqIO;
use Bio::Seq::Quality;
my $in = Bio::SeqIO->new(-format => "fastq",
-variant => "sanger",
-file => 'head10000.fastq' );
while(my $seq = $in->next_seq){ print $seq->id,"\n";
print $seq->seq,"\n";
print $seq->length,"\n";
print "@{$seq->qual}","\n";
last;
}
运行结果如下:
E00552::HHCM5ALXX::::
NTCGAAACGGCGGATCATGCCAGGCTGCAACTGCAGCTGGCCTACAACTGGCACTTTGAGGTGAATGACCGGAAGGACCCCCAAGAGACGGCCAAGCTCGTTTCAGTGCCAGACTTTGTAGGTGATGCCTGCAAAGCCATCGCATCCCGG
与此同时,我们查看 head10000.fastq 文件的前四行:
@E00552::HHCM5ALXX:::: :N::TACAGCAT
NTCGAAACGGCGGATCATGCCAGGCTGCAACTGCAGCTGGCCTACAACTGGCACTTTGAGGTGAATGACCGGAAGGACCCCCAAGAGACGGCCAAGCTCGTTTCAGTGCCAGACTTTGTAGGTGATGCCTGCAAAGCCATCGCATCCCGG
+
#AA<FJJJFJJJJFJJJJJJJJJFJJJJ<-F<JF7JJJJJJJJJJF<JF7FJFAJFJJJJJJ<F-FJFAJJFJFJFAJJJJJJJAAFF<AJF7AFJJAF-AJJJFJJJJJJJJFJJF<AAFJJFJJJFAFFAAFFJ-AFJJA<-7F)-<
对照ascii码表可以发现,运行结果的最后一行,即为原始文件的第四行的ascii码对应的十进制数值减去33。例如 "#"(35) - 33 = 2;"A"(65) - 33 = 32;“<”(60) - 33 = 27。也就是说这里的碱基质量用的是phred33。
最后解释一下这几行命令的意思:
print $seq->id; #打印$seq对象的序列ID;
print $seq->seq; #打印$seq对象的序列碱基;
print $seq->length; #打印$seq对象的序列长度;
print "@{$seq->qual}"; #打印$seq对象的序列质量;
利用Bioperl的SeqIO模块解析fastq文件的更多相关文章
- python 利用三方的xlrd模块读取excel文件,处理合并单元格
目的: python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 总体思路: (1)要想实现对Excel数据的读取,需要用到第三方应用,直接应用. (2)实际操作时候和我 ...
- 使用XML序列化器生成XML文件和利用pull解析XML文件
首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message&g ...
- PS常见错误-无法完成请求,因为文件格式模块不能解析该文件
无法完成请求,因为文件格式模块不能解析该文件 将图片格式变成.jpg格式就可以了
- 在java项目中怎样利用Dom4j解析XML文件获取数据
在曾经的学习.net时常常会遇到利用配置文件来解决项目中一些须要常常变换的数据.比方数据库的连接字符串儿等.这个时候在读取配置文件的时候.我们一般会用到一个雷configuration,通过这个类来进 ...
- 利用kseq.h parse fasta/fastq 文件
在分析中经常需要统计fasta/fastq文件的序列数和碱基数, 但是没有找到一些专门做这件事的小工具,可能是这个功能太简单了: 之前用自己写的perl的脚本统计这些信息, 当fastq文件非常大时, ...
- 安卓开发之利用XmlPullParser解析XML文件
package com.lidaochen.phonecall; import android.support.v7.app.AppCompatActivity; import android.os. ...
- python XML文件解析:用xml.dom.minidom来解析xml文件
python解析XML常见的有三种方法: 一是xml.dom.*模块,是W3C DOM API的实现,若需要处理DOM API则该模块很合适, 二是xml.sax.*模块,它是SAX API的实现,这 ...
- optparse模块解析命令行参数的说明及优化
一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...
- 如何用python解析mysqldump文件
一.前言 最近在做离线数据导入HBase项目,涉及将存储在Mysql中的历史数据通过bulkload的方式导入HBase.由于源数据已经不在DB中,而是以文件形式存储在机器磁盘,此文件是mysqldu ...
随机推荐
- 这次彻底理解了Object这个属性
1.实例化Object对象 实例化Object对象的方式有两种:使用Object构造器和使用对象的字面量.例如: var person1 = { name: '李四' }; var person2 = ...
- Apache设置用户权限(2个域名。一个能访问全部文件,一个只能访问指定文件)
可以利用apache的虚拟主机的配置设置: 2个域名一个是xxxxx.com ,一个是aaaaa.com xxxxx.com配置只访问jpg文件,aaaaa.com可以访问所有文件 <Virtu ...
- Python/零起点(一、数字及元组)
Python/零起点(一.数字及元组) int整型 int()强行转换成整型数据类型 int整型是不可变,且是不可迭代的对象 一.整型数字用二进制位数表示案例: age=7 #设定一个数字赋值给age ...
- Centos7 安装python3
Centos7 安装python3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #安装sqlite-devel yum -y ...
- CMDB开发
浅谈ITIL TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central ...
- Linux平台部署.Net Core SDK
根据微软MSDN,.Net Core无论是1.x还是2.0都只支持64位系统. 准备 以下是.NetCore支持的系统版本 以下 Linux 64 位(x86_64 或 amd64)发行版本/版本支持 ...
- Linux:sheel脚本for的用法,及日期参数+1day用法
记录下shell的for的用法,及参数是日期的情况下,该日期+1day的用法: #!/usr/bin/env bash source /app/catt/login.sh p_days="2 ...
- 初识 SpringMVC
1.Spring MVC 的工作流程 1.web请求被 前端控制器(DispatcherServlet)拦截 2.DispatcherServlet调用 映射处理器(HandelerMapping)查 ...
- hdu-2639 Bone Collector II---第k大背包
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2639 题目大意: 求第k大背包. 思路: 由01背包递推式dp[i][j] = max(dp[i][ ...
- logging的使用方法
logging的使用方法 1,简单使用方法 >>> import logging >>> logging.warning('this is a warning') ...