有没有办法将整个"对齐字段/列"保存到NumPy数组中使用Samtools?

2024-09-29 21:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

假设我想要一个给定BAM文件中所有“QNAMES”的NumPy数组。或者,可以将多个列导入数据帧。你知道吗

pysam可以实现这个功能吗?你知道吗

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

seg = AlignmentSegment()
print(seg.qname)

但是,您能否将所有qname保存到NumPy数组中?你知道吗


Tags: 文件numpysam格式线性数组flagqname
1条回答
网友
1楼 · 发布于 2024-09-29 21:36:17

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

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)

相关问题 更多 >

    热门问题