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