前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python处理bam/sam文件利器pysam

python处理bam/sam文件利器pysam

作者头像
生信编程日常
发布2020-04-09 14:45:00
2.9K0
发布2020-04-09 14:45:00
举报

在python中读取、处理文件可以用pysam这个包。以下简单介绍一下这个包的使用。

  1. 读取文件
代码语言:javascript
复制
import pysam

samfile = pysam.AlignmentFile("ENCFF191HCE.sort.bam", "rb")

仅读取某条染色体某个区域的reads:

代码语言:javascript
复制
# 这里bam文件必须先index
for read in samfile.fetch('chr1', 904920, 904930):
    print(read)

这里返回了符合的read: HWI-ST1293:36:D11AHACXX:6:2110:12478:90259 0 0 904928 37 20M -1 -1 20 TGAGCGTCGCCGGACTCCGC array('B', [34, 34, 31, 37, 37, 37, 35, 37, 39, 39, 39, 39, 39, 40, 41, 41, 41, 41, 41, 41]) [('X0', 1), ('X1', 0), ('MD', '20'), ('PG', 'MarkDuplicates.2'), ('XG', 0), ('NM', 0), ('XM', 0), ('XO', 0), ('XT', 'U')]

  1. 写入文件
代码语言:javascript
复制
# 将双端reads写入新文件
pairedreads = pysam.AlignmentFile("allpaired.bam", "wb", template=samfile)
for read in samfile.fetch():
    if read.is_paired:
        pairedreads.write(read)

pairedreads.close()
samfile.close()
  1. sort
代码语言:javascript
复制
pysam.sort("-o", "output.bam", "ENCFF191HCE.sort.bam")
# 相当于
samtools sort -o output.bam ENCFF191HCE.sort.bam
  1. 判断read
代码语言:javascript
复制
# 是否双端
read.is_paired

#  是否没有map上
read.is_unmapped

# 是否read1/read2
read.is_read1
read.is_read2

此外还有read.is_duplicate;read.is_proper_pair;read.is_reverse;read.is_supplementary;read.isize;read.is_qcfail;read.is_secondary。

  1. flag
代码语言:javascript
复制
read.flag

此外返回0,即单端的forward read且map上了。

  1. 得到标签
代码语言:javascript
复制
read.get_tag('NM') 
read.get_tag('MD')

会返回NM标签0(即没有任何mismatch和indel),MD标签的20。

  1. 染色体名称
代码语言:javascript
复制
read.reference_name

返回”chr1“。

此外,还有很多别的功能,并且还可以读取操作VCF/BCF文件。详细可参阅手册:https://buildmedia.readthedocs.org/media/pdf/pysam/v0.11.2.2/pysam.pdf

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档