kseq
kseq is a simple fasta/fastq (fastx) format parser library for Rust, its main function is to iterate over the records from fastx files (similar to kseq in C). It uses shared buffer to read and store records, so the speed is very fast. It supports a plain or gz fastx file or io::stdin, as well as a fofn (file-of-file-names) file, which contains multiple plain or gz fastx files (one per line).
Using kseq is very simple. Users only need to call parse_path to parse the path, and then use iter_record method to get each record.
-
parse_pathThis function takes a path (Option<String>) as input, a path can be a fastx file,Noneor-forio::stdin, or a fofn file. It return aResulttype:Ok(T): An structTwith theiter_recordmethod.Err(E): An errorEincluding can't open or read, wrong fastx format or invalid path or file errors.
-
iter_recordThis function can be called cyclically, it return anOptiontype:-
Some(Record): An structRecordwith methods:head: get sequence id/identifier (&str)seq: get sequence (&str)des: get sequence description/comment (&str)sep: get separator (&str)qual: get quality scores (&str)len: get sequence length (usize)
Note: call
des,sepandqualwill return""ifRecorddoes have these attributes.head,seq,des,sepandqualuse unsafe codestr::from_utf8_unchecked. -
None: Stream has reachedEOF.
-
Examples
use std::env::args;
use kseq::path::parse_path;
fn main(){
let path: Option<String> = args().nth(1);
let mut records = parse_path(path).unwrap();
while let Some(record) = records.iter_record() {
println!("head:{} des:{} seq:{} qual:{} len:{}",
record.head(), record.des(), record.seq(), record.qual(), record.len());
}
}