zoukankan      html  css  js  c++  java
  • pysam

    pysam 模块介绍!!!!

    http://pysam.readthedocs.io/en/latest/index.html

    在开发基因组相关流程或工具时,经常需要读取、处理和创建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):
    ...     print(read)

    fetch方法的API如下,chr6为参考序列,后面数字分别为读取的起始和终止位置.

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

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

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

    gvcf = "./MHC.unified.g.vcf.gz"
    vcf_in = pysam.VariantFile(gvcf)

    若想随机读取,仍然需要建立索引:

    首先使用bgzip压缩vcf

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

    然后用bcftools建立索引

    bcftools index -c MHC.g.vcf.gz

    使用fetch读取

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

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

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

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

    header = { ‘HD‘: {‘VN‘: ‘1.0‘},
                ‘SQ‘: [{‘LN‘: 1575, ‘SN‘: ‘chr1‘},
                       {‘LN‘: 1584, ‘SN‘: ‘chr2‘}] }
    
    with pysam.AlignmentFile(tmpfilename, "wb", header=header) as outf:
        a = pysam.AlignedSegment()
        a.query_name = "read_28833_29006_6945"
        a.query_sequence="AGCTTAGCTAGCTACCTATATCTTGGTCTTGGCCG"
        a.flag = 99
        a.reference_id = 0
        a.reference_start = 32
        a.mapping_quality = 20
        a.cigar = ((0,10), (2,1), (0,25))
        a.next_reference_id = 0
        a.next_reference_start=199
        a.template_length=167
        a.query_qualities = pysam.qualitystring_to_array("<<<<<<<<<<<<<<<<<<<<<:<9/,&,22;;<<<")
        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

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

    标签:class   style   log   http   it   使用   la   sp   文件   

    原文:http://www.cnblogs.com/leezx/p/5908767.html

  • 相关阅读:
    QtAV编译
    git 恢复到刚刚clone下来的状态
    select2 清除选中项解决办法
    mysql: 查看某库表大小
    C# Linq 交集、并集、差集、去重
    mvc ajax访问后台时session过期无法跳转到Login页面问题解决
    Asp.net:上传文件超过了最大请求长度
    Firebug 没死,活在 Firefox DevTools 中
    vs2015 加载项目的时启动:无法启动 IIS Express Web 服务器
    Visual Studio安装SVN插件
  • 原文地址:https://www.cnblogs.com/nkwy2012/p/6558069.html
Copyright © 2011-2022 走看看