pysam读取bam files[转载]

pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)

在开发基因组相关流程或工具时,经常需要读取、处理和创建bam、vcf、bcf 文件。目前已经有一些主流的处理此类格式文件的工具,如samtools、picard、vcftools、bcftools,但此类工具集成的大多是标 准功能,在编程时如果直接调用的话往往显得不够灵活。

本文介绍的是一个处理基因组数据的python模块,它打包了htslib-1.3、samtools-1.3 和 bcftools-1.3的核心功能,能在编程时非常灵活的处理bam和bcf文件。

以下主要介绍pysam的安装和使用方法:

1. 安装

如果Linux上安装了pip,可以一键安装,在集群上的话,需要登录安装节点进行安装。

import pysam

2.读取bam文件(pysam.AlignmentFile)

bam是sam的二进制文件,因其占用空间少,所以都会使用bam进行存储和操作。

要读取bam文件,必须先创建一个AlignmentFile对象.

for line in samfile:
    print(line)
    break

但顺序读取还不够灵活,我们有时需要随机读取(提示:sam不能随机读取),pysam的fetch方法提供了随机读取功能.

直接使用fetch会报错

samtools index corrected.bam

fetch返回的是一个迭代器(iterator),可以迭代读取内容.

fetch(self, reference=None, start=None, end=None, region=None, tid=None, until_eof=False, multiple_iterators=False)

3.读取vcf/bcf文件(pysam.VariantFile)

读取方法同上,只是使用的是VariantFile方法:

bgzip -c MHC.g.vcf > MHC.g.vcf.gz

然后用bcftools建立索引

for rec in vcf_in.fetch(‘chr6‘, 28577796, 28577896):
...     print(rec)
...     break

3.随机读取fasta文件(faidx建立索引)

读取方法略有不同,fetch返回的本身就是一个字符串。

fasta_file = pysam.FastaFile(path)
fasta_file.fetch("m160727_060737_42266_c101014182550000001823222610211695_s1_p0/110008/22268_22731")

4.创建并写入到新的bam或vcf文件

pysam的核心功能是可以随心所欲的读取数据,处理之后,写入到一个新建的bam或bcf文件里.

我们可以完全自定义一些内容,然后写入到一个新的bam文件里,如下:

") a.tags = (("NM", 1), ("RG", "L1")) outf.write(a)

同理,我们也可以读取一个已有的bam文件,逐个修改以上的属性,然后存储到一个新的bam文件里.这里不再举例.

上面设置header可能有点麻烦,容易出错,但我们可以复制一个已有bam文件的header到一个新的bam文件里.

outf = pysam.AlignmentFile(path_out, "wb", template=samfile)

以上template参数指定了模板bam文件.

5. 关闭文件

outf.close()

总结:

pysam模块非常实用,有了pysam模块,我们就可以非常灵活的操纵bam/bcf文件,而不必依赖于samtools或bcftools. pysam可以随机读取bam/bcf文件,也可以将处理后的内容自定义输出到bam/bcf文件.

以上只介绍了pysam最常见的功能,更多pysam功能请参照:http://pysam.readthedocs.io/en/latest/index.html

时间: 2024-11-04 20:46:03

pysam读取bam files[转载]的相关文章

Pysam 处理bam文件

Pysam可用来处理bam文件 安装: 用 pip 或者 conda即可 使用: Pysam的函数有很多,主要的读取函数有: AlignmentFile:读取BAM/CRAM/SAM文件 VariantFile:读取变异数据(VCF或者BCF) TabixFile:读取由tabix索引的文件: FastaFile:读取fasta序列文件: FastqFile:读取fastq测序序列文件 一般常用的是第一个和第二个. 例子: import pysam bf = pysam.AlignmentFil

InnoDB: Error number 24 means ‘Too many open files’.--转载

一.问题的描述 备份程序 执行前滚的时候报错.(-apply-log) InnoDB: Errornumber 24 means 'Too many open files'. InnoDB: Some operatingsystem error numbers are described at InnoDB: http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html InnoDB: File name/home/nic

pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)

在开发基因组相关流程或工具时,经常需要读取.处理和创建bam.vcf.bcf文件.目前已经有一些主流的处理此类格式文件的工具,如samtools.picard.vcftools.bcftools,但此类工具集成的大多是标准功能,在编程时如果直接调用的话往往显得不够灵活. 本文介绍的是一个处理基因组数据的python模块,它打包了htslib-1.3.samtools-1.3 和 bcftools-1.3的核心功能,能在编程时非常灵活的处理bam和bcf文件. 以下主要介绍pysam的安装和使用方

pysam 模块

pysam is a python module that makes it easy to read and manipulate mapped short read sequence data stored in SAM/BAM files. 要读bam文件, 首先实例化一个Samfile对象 import pysam samfile = pysam.Samfile('ex1.bam', 'rb') #r 是reading. w是writing.b是指bam文件, 不加的话默认是sam. 如

GATK--使用转载

http://blog.sciencenet.cn/blog-1469385-819498.html 文章目录 一.准备工作 二.流程概览 三.流程 首先说说GATK可以做什么.它主要用于从sequencing 数据中进行variant calling,包括SNP.INDEL.比如现在风行的exome sequencing找variant,一般通过BWA+GATK的pipeline进行数据分析. 要run GATK,首先得了解它的网站(http://www.broadinstitute.org/

Java Path与Files

Path和Files类封装了在用户机器上处理文件系统所需的所有功能,Path和Files是在Java SE 7 中新添加进来的类,使用时注意JDK版本. //在传统java.io中, 文件和目录都被抽象成File对象, 即 File file = new File("."); //NIO.中则引入接口Path代表与平台无关的路径,文件和目录都用Path对象表示 //通过路径工具类Paths返回一个路径对象Path Path path = Paths.get("D:\\Work

一个全基因组重测序分析实战

Original 2017-06-08 曾健明 生信技能树 这里选取的是 GATK best practice 是目前认可度最高的全基因组重测序分析流程,尤其适用于 人类研究. PS:其实本文应该属于直播我的基因组系列,有两个原因把它单独拿出来, 首先,直播我的基因组阅读量太低了,可能是大家觉得错过了前面的,后面的看起来没有必要,这里我可以肯定的告诉大家,这一讲是独立的,而且是全流程,你学好了这个,整个直播我的基因组就可以不用看了. 其次,最近有一些朋友写了一些GATK的教程,但是大多不合我意,

Node.js中内置文件系统一些常用的方法总结

文件系统(fs) 首先引入内置模块:var fs = require("fs"); readFile 1.异步读取一个文件的全部内容:fs.readFile("./filename",[options],function(err,data){statements}) // fs.readFile('./88.txt','utf-8',function(err,data){ // if(!err){ // console.log("读取成功");

今天发现自己会的真不多,关于判断是否联网

今天遇到一些问题,所以在这里讲问题汇总一下并且存下来 第一个:  关于怎么使用JS判断网络是否连接 //这种方法是利用通过对html5的navigator新特性的onLine属性判断,可轻松搞定是否在线的判断(true:在线:false:离线); //简单的判断网络是否未连接 if(window.navigator.onLine==true){ alert("已链接"); }else{ alert("未连接); } 关于window.navigator.onLine事件 on