使用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
相关产品推荐
相关产品推荐

