Python 使用Pysam在特定位置访问Bam文件

Python 使用Pysam在特定位置访问Bam文件,python,bioinformatics,python-module,biopython,pysam,Python,Bioinformatics,Python Module,Biopython,Pysam,我有一个给定的染色体编号和位置(chr1和位置1599812)。我想使用python的pysam模块访问bam文件,以获取仅针对特定区域chr1和位置1599812的读取编号信息。我尝试过使用pileup(),但它需要一系列的位置,而在我的情况下,我只需要一个特定的位置,而不是一个这样的范围。如果您设置了相同的起点和终点,pileup将仅指该特定位置。例如(纯samtools): 显示了覆盖1号染色体808957位置的102次读取。我不认为pileup()是您想要的-根据,此函数返回“基因组位置

我有一个给定的染色体编号和位置(chr1和位置1599812)。我想使用python的pysam模块访问bam文件,以获取仅针对特定区域chr1和位置1599812的读取编号信息。我尝试过使用
pileup()
,但它需要一系列的位置,而在我的情况下,我只需要一个特定的位置,而不是一个这样的范围。

如果您设置了相同的起点和终点,pileup将仅指该特定位置。例如(纯samtools):

显示了覆盖1号染色体808957位置的102次读取。

我不认为
pileup()
是您想要的-根据,此函数返回“基因组位置的迭代器”,特别是,“‘所有’与区域重叠的读取将被返回。返回的第一个碱基将是第一次读取的第一个碱基,而不一定是查询中使用的区域的第一个碱基。”

你是说你想获得“读取次数信息”——也就是在特定位置的读取次数,对吗?为此,
count\u coverage()
应该做这项工作。在你的情况下,我认为这段代码应该给出你想要的答案:

import pysam

my_bam_file = '/path/to/your/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')  # 'rb' ~ read bam
coverage = imported.count_coverage(
                  contig = '1',     # Chromosome ID; also might be "chr1" or similar 
                  start = 1599812,
                  stop = 1599813,
                  )
print(coverage)
请注意,这是因为,如中所述, pysam使用半开间隔,因此范围[1599812,1599813]将 只包含一个碱基对

运行上面的代码将得到如下结果:

> (array('L', [0]), array('L', [0]), array('L', [0]), array('L', [0]))
这是一个数组元组,分别包含覆盖此基因组位置的读取中的a、C、G和T碱基数。如果您只是对映射到此特定基因组位置总数的读取数感兴趣,则可以在此元组中求和:

import numpy as np

print(np.sum(coverage))

尝试添加更多标记,以便能够帮助您查找问题的人员更容易找到您的bam索引了吗?您是否尝试将开始索引和结束索引设置为相同的坐标(警告:基于0,而不是基于残数)
import numpy as np

print(np.sum(coverage))