#fasta #fastq #file-path #file-io #file-format #record #fastx

kseq

一个简单的 fasta/fastq 格式解析库

16 个版本

0.5.3 2024 年 3 月 1 日
0.5.1 2023 年 6 月 13 日
0.5.0 2022 年 8 月 23 日
0.3.1 2022 年 6 月 20 日
0.2.6 2021 年 11 月 16 日

#508解析器实现

Download history 3/week @ 2024-06-03 3/week @ 2024-06-10 13/week @ 2024-07-01 7/week @ 2024-07-15 122/week @ 2024-07-29 15/week @ 2024-08-05

每月 144 次下载

MIT 许可证

21KB
380

Crates.io Crates.io docs.rs

kseq

kseq 是一个简单的 fasta/fastq (fastx) 格式解析库,用于 Rust,其主要功能是遍历 fastx 文件中的记录(类似于 kseqC 中的实现)。它使用共享缓冲区来读取和存储记录,因此速度非常快。它支持 plain 或 gz fastx 文件,以及 io::stdin,以及包含多个 plain 或 gz fastx 文件(每行一个)的 fofn(文件名文件)。

使用 kseq 非常简单。用户只需要调用 parse_path 来解析路径或 parse_reader 来解析读取器,然后使用 iter_record 方法获取每个记录。

  • parse_path 此函数接受一个实现 AsRef<std::path::Path> 的路径作为输入,路径可以是 fastx 文件,- 表示 io::stdin,或 fofn 文件。它返回一个 Result 类型

    • Ok(T):一个具有 iter_record 方法的结构 T
    • Err(E):一个错误 E,包括缺失输入、无法打开或读取、错误的 fastx 格式或无效的路径或文件错误。
  • parse_reader 此函数接受一个实现 std::io::Read 的读取器作为输入。它返回一个 Result 类型

    • Ok(T):一个具有 iter_record 方法的结构 T
    • Err(E):一个错误 E,包括缺失输入、无法打开或读取、错误的 fastx 格式或无效的路径或文件错误。
  • iter_record 这个函数可以在循环中调用,它返回一个 Result<Option<Record>> 类型

    • Ok(Some(Record)):一个具有方法的 Record 结构体

      • head -> &str:获取序列 ID/标识符
      • seq -> &str:获取序列
      • des -> &str:获取序列描述/注释
      • sep -> &str:获取分隔符
      • qual -> &str:获取质量分数
      • len -> usize:获取序列长度

      注意: 调用 dessepqual 将返回 "",如果 Record 没有这些属性。

    • Ok(None):流已到达 EOF

    • Err(ParseError):一个错误 ParseError,包括 IOTruncateFileInvalidFastaInvalidFastq 错误。

示例

use std::env::args;
use std::fs::File;
use kseq::parse_path;

fn main(){
	let path: String = args().nth(1).unwrap();
	let mut records = parse_path(path).unwrap();
	// let mut records = parse_reader(File::open(path).unwrap()).unwrap();
	while let Some(record) = records.iter_record().unwrap() {
		println!("head:{} des:{} seq:{} qual:{} len:{}", 
			record.head(), record.des(), record.seq(), 
			record.qual(), record.len());
	}
}

安装

cargo add kseq

基准测试

cargo bench

依赖项

~1.2–1.8MB
~31K SLoC