在开发基因组相关流程或工具时,经常需要读取、处理和创建bam、vcf、bcf文件。目前已经有一些主流的处理此类格式文件的工具,如samtools、picard、vcftools、bcftools,但此类工具集成的大多是标准功能,在编程时如果直接调用的话往往显得不够灵活。
本文介绍的是一个处理基因组数据的python模块,它打包了htslib-1.3、samtools-1.3 和 bcftools-1.3的核心功能,能在编程时非常灵活的处理bam和bcf文件。
以下主要介绍pysam的安装和使用方法:
1. 安装
如果Linux上安装了pip,可以一键安装,在集群上的话,需要登录安装节点进行安装。
pip3 install pysam
检查是否安装成功
import pysam
2.读取bam文件(pysam.AlignmentFile)
bam是sam的二进制文件,因其占用空间少,所以都会使用bam进行存储和操作。
要读取bam文件,必须先创建一个AlignmentFile对象.
path_in = './test.bam'
samfile = pysam.AlignmentFile(path_in, "rb")
之后就可以逐行读取和处理bam文件了(顺序读取),以下打印出了bam的一行.
for line in samfile:
print(line)
break
但顺序读取还不够灵活,我们有时需要随机读取(提示:sam不能随机读取),pysam的fetch方法提供了随机读取功能.
直接使用fetch会报错
ValueError: fetch called on bamfile without index
提示我们需要建立(.bai)索引
samtools index corrected.bam
fetch返回的是一个迭代器(iterator),可以迭代读取内容.
for read in samfile.fetch('chr6', 28478220, 28478222):
.