Python读Fastq新姿势

分析二代测序数据时免不了要对fastq文件进行操作,然而也会出现想进行的操作并没有现成的工具可以实现的情况,这时候就需要自己写一个小脚本来读取fastq文件并进行操作。

其实用Python读取fastq文件的逻辑也很简单,根据fastq每四行为一个read的特点,边读边记行数,行数除4余2的行即位序列所在的行。这种方法看起来很naive,不过好像也没有更优雅的方式,直到我发现了mappy。

mappy简介

mappy是minimap2的Python版本,同样也是出自Li Heng,你可以使用它在Python程序直接实现和minimap2同样性能的比对工具,而不在需要从命令行调用。不要问为什么这么强,问就是Cython。

而这里我们需要用到的只是mappy的一个小小的功能:

可以看到mappy读取fastq只需要一行:mp.fastx_read('./test.fq',read_comment=True),然后返回一个迭代器,内容是一个元组,read ID,序列包括质量等信息都在里面。

mappy性能对比

这里通过一个小任务来比较mappy和我以前使用的方法的区别(其实也是Cython和Python的区别)

任务是将一个有1千万条read的fastq文件截取前50bp写进新fastq,read ID不变。

相比之下,不仅代码少了很多,而且时间缩短了约25%。

换成gzip压缩文件后:

mappy的速度优势更明显了。

今天也是羡慕C的速度的一天呢😐。


Python读Fastq新姿势
http://example.com/2020/05/27/Python读Fastq新姿势/
作者
Wang Jianhua
发布于
2020年5月27日
许可协议