1

在SAM格式中,每条对齐线代表一个段的线性对齐,每条线有11个必填字段,即QNAME、FLAG、RNAME、POS、MAPQ等。

假设我想要一个给定 BAM 文件中所有“QNAMES”的 NumPy 数组。或者,可以采用几列并将它们导入 Pandas Dataframe。

pysam 可以实现此功能吗?

人们可以很自然地用 来打开给定的 BAM 文件,pysam.AlignmentFile()然后用 来访问各个段pysam.AlignmentSegment(),例如

seg = AlignmentSegment()
print(seg.qname)

但是,您可以将所有 QNAMES 保存到 NumPy 数组中吗?

4

2 回答 2

0

是的,这是可行的。请注意,pysam出于您的目的从 BAM 文件导入读取时,最好使用该函数来完成,该函数会在 BAM 文件中的所有读取(对象)fetch()上创建一个迭代器。然后使用以下函数pysam.AlignmentSegment()检索 QNAME :query_name

import pysam
import numpy as np

my_bam_file = '/path/to/your/bam_file.bam'
imported = pysam.AlignmentFile(my_bam_file, mode = 'rb')
bam_it = imported.fetch(until_eof = True)
# Use head(n) instead of fetch(), if you only want to retrieve the first 'n' reads
qnames = [read.query_name for read in bam_it]

这里qnames是 BAM 文件中所有 QNAME 的列表。如果您坚持要获取 NumPy 数组,只需在末尾添加以下行:

qnames = np.asarray(qnames)
于 2019-12-12T22:16:17.703 回答
0
# pip install pyranges 
# or 
# conda install -c bioconda pyranges

import pyranges
bam_df = pyranges.read_bam(f, sparse=False, as_df=True, mapq=0, required_flag=0, filter_flag=1540)
于 2020-05-13T05:42:19.970 回答