16 个版本
| 0.5.3 | 2024 年 3 月 1 日 |
|---|---|
| 0.5.1 |
|
| 0.5.0 |
|
| 0.3.1 | 2022 年 6 月 20 日 |
| 0.2.6 | 2021 年 11 月 16 日 |
#508 在 解析器实现
每月 144 次下载
21KB
380 行
kseq
kseq 是一个简单的 fasta/fastq (fastx) 格式解析库,用于 Rust,其主要功能是遍历 fastx 文件中的记录(类似于 kseq 在 C 中的实现)。它使用共享缓冲区来读取和存储记录,因此速度非常快。它支持 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:获取序列长度
注意: 调用
des、sep和qual将返回"",如果Record没有这些属性。 -
Ok(None):流已到达EOF。 -
Err(ParseError):一个错误ParseError,包括IO、TruncateFile、InvalidFasta或InvalidFastq错误。
-
示例
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