Pysam可用來處理bam文件
安裝:
用 pip 或者 conda即可
使用:
Pysam的函數有很多,主要的讀取函數有:
-
AlignmentFile:讀取BAM/CRAM/SAM文件
-
VariantFile:讀取變異數據(VCF或者BCF)
-
TabixFile:讀取由tabix索引的文件;
-
FastaFile:讀取fasta序列文件;
-
FastqFile:讀取fastq測序序列文件
一般常用的是第一個和第二個。
例子:
1 import pysam 2 3 bf = pysam.AlignmentFile("in.bam","rb"); 其中r = read, b:binary. 二進制文件。 bam文件index
bf是一個迭代器,可以next()或者for讀取
1 for i in bf: 2 print i.reference_name,i.pos,i.mapq,i.isize
結果:
1 ctg000331_np121 144935 27 -284 2 ctg000331_np121 144940 48 291 3 ctg000331_np121 144941 48 309 4 ctg000331_np121 144944 48 255 5 ctg000331_np121 144946 27 -370 6 ctg000331_np121 144947 27 -346
-
i.reference_name代表read比對到的參考序列染色體id;
- i.flag bam的flag值
-
i.pos代表read比對的位置;
-
i.mapq代表read的比對質量值;
-
i.isize代表PE read直接的插入片段長度,有時也稱Fragment長度;
很多功能見下圖:

** pysam中的坐標位點是0開始,染色體起始位置為0,不是1
1 ## sam 文件依次對應的12列 2 r.qname: reads 名 3 r.flag :Flag 4 r.reference_name: 比對到的染色體 5 r.pos+1: 比對位置,必須得加一 6 r.mapq: 比對質量 7 r.cigarstring: CIGAR 8 r.next_reference_name:另外一條reads比對的參考基因組,若和第一條相同,則輸出= 9 r.mpos+1: 比對的位置,必須得加1 10 r.isize: 插入片段長度 11 r.seq:reads seq 12 r.qual: reads 質量
一些功能:
- check_index()
檢測index文件是否存在存在即為true
1 bf.check_index() 2 True
- close()
用完記得關閉
1 bf.close()
- count(self,contig=None, start=None, stop=None, region=None, until_eof=False, read_callback='nofilter', reference=None,end=None)
1 bf.count(contig="ctg000331_np121", start=1, stop=6000) 2 24
- count_coverage(self, contig=None, start=None, stop=None, region=None, quality_threshold=15, read_callback='all', reference=None, end=None)
1 bf.count_coverage(contig="ctg000331_np121",start=1,stop=100)
- fetch(self, contig=None, start=None, stop=None, region=None, tid=None, until_eof=False, multiple_iterators=False, reference=None, end=None)
1 allreads=bf.fetch(contig="ctg000331_np121",start=1,stop=10000) 2 是一個迭代器,可以用for循環獲得
- get_index_statistics(self)
通過index統計該BAM文件中在各個染色體上mapped/unmapped的reads個數
1 bf.get_index_statistics()
- fetch函數定位特定區域
有時候我們並不需要遍歷整一份BAM文件,我們可能只想獲得區中的某一個區域(比如chr1中301-310中的信息),那么這個時候可以用Alignmen模塊中的fetch函數:
bam文件必須要index
1 for r in bf.fetch('chr1', 300, 310): 2 print r 3 bf.close()
關注下方公眾號可獲得更多精彩

參考
