对您的问题的简短回答是您使用的格式是
pysam.view(ops, bamfile, '1:2010000-20200000','2:2010000-20200000')
(另请注意,表示每个区域结束的数字比开头大约 10 倍 - 看来您可能打算2010000-2020000
改为。)
我已经使用以下代码对其进行了测试:
import pysam
my_bam_file = '/path/to/my/bam_file.bam'
alignments1 = pysam.view(my_bam_file, '1:2010000-4000000')
alignments2 = pysam.view(my_bam_file, '1:5000000-6000000')
alignments3 = pysam.view(my_bam_file, '1:2010000-4000000', '1:5000000-6000000')
print(len(alignments1) + len(alignments2) == len(alignments3))
[Output:] True
但是,这种提取对齐方式的效率不是很高,因为您得到的输出是一个大str
的,而不是单独的对齐方式。要获得一个list
单独的对齐方式,请使用以下代码:
import pysam
my_bam_file = '/path/to/my/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')
regions = ('1:2010000-20200000','2:2010000-20200000')
alignments = []
for region in regions:
bam = imported.fetch(region = region, until_eof = True)
alignments.extend([alignment for alignment in bam])
然后每个元素alignment
最终成为一个pysam.AlignedSegment
对象,您可以使用pysam API中的函数进一步使用它。