You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rust-htslib与PyO3开发的Python模块处理BAM文件时,输出仅保留头部、丢失所有记录的问题求助

rust-htslib与PyO3开发的Python模块处理BAM文件时,输出仅保留头部、丢失所有记录的问题求助

我最近在开发一个工具,用Rust的rust-htslib crate处理BAM文件,同时通过PyO3将功能封装为Python模块供调用。我的核心需求是:读取包含头部和记录的输入BAM文件,将完整内容(头部+所有记录)写入到输出BAM文件中。但目前遇到了一个棘手的问题——生成的输出BAM文件仅包含头部,所有的记录都丢失了,想请教各位,是不是我在rust-htslib的BAM写入逻辑上遗漏了什么关键步骤?

以下是我的代码实现:

use pyo3::prelude::*;
use rust_htslib::{bam, bam::Read};

#[pyfunction]
fn parse_bam(input_path: &str, output_path: &str) -> PyResult<()> {
    // Open BAM file for reading
    let mut bam = bam::Reader::from_path(input_path).unwrap();

    // Create a header for the output BAM
    let header = bam::Header::from_template(bam.header());

    // Open BAM file for writing
    let mut out = bam::Writer::from_path(output_path, &header, bam::Format::Bam)
        .map_err(|e| PyErr::new::<pyo3::exceptions::PyIOError, _>(format!("{}", e)))?;

    for r in bam.records() {
        let record = r.unwrap();
        out.write(&record).unwrap();
    }

    Ok(())
}

#[pymodule]
fn deidentify_utils(m: &PyModule) -> PyResult<()> {
    m.add_function(wrap_pyfunction!(parse_bam, m)?)
}

我已经通过samtools view input.bam命令和pysam库验证过,输入的input.bam文件确实同时包含头部和有效记录,但运行上述代码生成的output.bam文件里只有头部,所有记录都没有被写入。请问这是不是rust-htslib处理BAM写入时的某个细节我没注意到?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:15:54