生信实用工具:快速的多线程分割bam文件工具

前言

如果对较大的bam文件进行操作时,往往相当耗时,所以将一个很大的bam文件分割为几个较小的bam文件,在并行进行分析可以大大缩短所需要的时间。通常来说分割的方法是用bamtools,bamtools可以很方便的将bam文件按照染色体分割为若干个小的bam,代码如下:

bamtools split -in test.bam -reference

其中test.bam就是所需要分割的文件,-reference是按照染色体进行分割。
但是问题来了,bamtools的操作是逐个进行,且相当缓慢,当一个很大的bam文件进行分割时,速度慢的令人发指。有没有比较快的方法呢?答案当然是有的,我们可以利用samtools进行分割,操作为:

samtools view -@ 12 -b test.bam chr1 > chr1.bam

方案

通过如上代码我们就可以将1号染色体的Bam给分割出来,且可以通过参数-@调整所需要的线程数。
但是按照上面的操作仍然有一个很大的问题,如果我不知道这个bam的文件具体有那些染色体,这些染色体又叫做什么名字,且需要一次性进行分割该如何操作呢?这里我给大家写了一个简单的python脚本,复制如下代码保存为splitbam.py,运行命令:python splitbam.py -input test.bam -p 12 -outdir ./即可。
其中-input为输入的bam文件,-p为指定使用的线程数,-outdir为输出分割文件的路径,如果不存在会自动创建,可选参数--index,可以为每个分割的bam文件创建索引。
注意:使用该工具前务必正确安装samtoolspython
代码如下:

# -*- coding: utf-8 -*-
import os
import argparse

#############################################################################
#Author:Terry Xizzy txizzy#gmail.com
#Describtion: splitbam.py is a mulit processes tool for spilt the big bam file.
#Version: V1.0
#Data: 2021/10/19
#Example: python splitbam.py -input test.bam -p 12 -outdir ./
#############################################################################

parser=argparse.ArgumentParser(description='splitbam.py is a mulit processes tool for spilt the big bam file.')
parser.add_argument('-input',type=str,help='Input your bamfile',required=True)
parser.add_argument('-outdir',type=str,help='Input your output bamfile directory',required=True)
parser.add_argument('-p',type=int,help='Input the thread counts',default=12)
parser.add_argument('--index',action="store_true",help='Make index for splited bam files')
args=parser.parse_args()

bamfile = args.input
thread_count = args.p
outdir = args.outdir
#创建输出文件路径
if not os.path.exists(outdir):
    os.makedirs(outdir)

print("Split bam file, it may takes some time……")

def split_bam():
    split_cmd = "samtools view -H %s | cut -f 2 | grep SN | cut -f 2 -d \":\" > %s/chr.txt"%(bamfile,outdir)
    os.system(split_cmd) #得到该bam文件的所有染色体号
    with open(outdir+'/chr.txt','r') as chr_file:
        chr_n = chr_file.readlines()
        for item in chr_n:
            item = item.rstrip('\n')
            #分割bam,并对bam文件排序
            os.system("samtools view -@ {tn} -b {bam} {chr} | samtools sort -@ {tn} -o {out}/{chr}.bam".format(tn=thread_count,bam=bamfile,chr=item,out=outdir))
            if args.index:
               os.system("samtools index {out}/{chr}.bam {out}/{chr}.bam.bai".format(out=outdir,chr=item))
        os.remove(outdir+'/chr.txt')

split_bam()
print("All done!")

最后:如果想了解更多和生信或者精品咖啡有关的内容欢迎关注我的微信公众号:生信咖啡,更多精彩等你发现!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,387评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,845评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,091评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,308评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,662评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,795评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,008评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,466评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,687评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,181评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,531评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,177评论 3 239
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,126评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,862评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,734评论 2 274

推荐阅读更多精彩内容