15个版本
0.5.1 | 2023年3月27日 |
---|---|
0.4.1 | 2021年3月12日 |
0.4.0 | 2020年7月8日 |
0.3.2 | 2019年11月25日 |
0.1.1 | 2017年3月27日 |
在 生物学 中排名 第1
每月下载量 8,236
在 57 个crate(直接使用45个)中使用
100KB
2K SLoC
针尾鸟
针尾鸟是一个MIT许可的、最小复制FASTA/FASTQ解析器和k-mer处理库,适用于Rust。
目标是编写一组快速且经过良好测试的函数,这些函数可以被更专业的生物信息学程序使用。针尾鸟的目标是在解析FASTX文件时与readfq C库一样快,在k-mer计数时比等效的Python实现快得多(即25倍)。
示例
extern crate needletail;
use needletail::{parse_fastx_file, Sequence, FastxReader};
fn main() {
let filename = "tests/data/28S.fasta";
let mut n_bases = 0;
let mut n_valid_kmers = 0;
let mut reader = parse_fastx_file(&filename).expect("valid path/file");
while let Some(record) = reader.next() {
let seqrec = record.expect("invalid record");
// keep track of the total number of bases
n_bases += seqrec.num_bases();
// normalize to make sure all the bases are consistently capitalized and
// that we remove the newlines since this is FASTA
let norm_seq = seqrec.normalize(false);
// we make a reverse complemented copy of the sequence first for
// `canonical_kmers` to draw the complemented sequences from.
let rc = norm_seq.reverse_complement();
// now we keep track of the number of AAAAs (or TTTTs via
// canonicalization) in the file; note we also get the position (i.0;
// in the event there were `N`-containing kmers that were skipped)
// and whether the sequence was complemented (i.2) in addition to
// the canonical kmer (i.1)
for (_, kmer, _) in norm_seq.canonical_kmers(4, &rc) {
if kmer == b"AAAA" {
n_valid_kmers += 1;
}
}
}
println!("There are {} bases in your file.", n_bases);
println!("There are {} AAAAs in your file.", n_valid_kmers);
}
安装
针尾鸟需要安装rust
和cargo
。请使用您本地的包管理器(homebrew
、apt-get
、pacman
等)或通过rustup安装这些。
一旦您设置了Rust,您可以在Cargo.toml
文件中包含needletail,如下所示
[dependencies]
needletail = "0.4"
为开发安装needletail本身
git clone https://github.com/onecodex/needletail
cargo test # to run tests
Python
文档
对于实际示例,您可以参考test_python.py
。
Python库只抛出一个类型的异常:NeedletailError
。
有两种方法可以解析FASTA/FASTQ:如果您有一个字符串(parse_fastx_string(content: str)
)或文件的路径(parse_fastx_file(path: str)
)。如果文件未找到或内容无效,这些函数将抛出异常,并返回一个迭代器。
from needletail import parse_fastx_file, NeedletailError, reverse_complement, normalize_seq
try:
for record in parse_fastx_file("myfile.fastq"):
print(record.id)
print(record.seq)
print(record.qual)
except NeedletailError:
print("Invalid Fastq file")
记录具有以下形状
class Record:
id: str
seq: str
qual: Optional[str]
def is_fasta(self) -> bool
def is_fastq(self) -> bool
def normalize(self, iupac: bool)
请注意,normalize
(请参阅https://docs.rs/needletail/0.4.1/needletail/sequence/fn.normalize.html了解其功能)会修改self.seq
。它还可以作为normalize_seq(seq: str, iupac: bool)
函数使用,此函数会返回标准化序列。
最后,还有一个reverse_complement(seq: str)
函数,它将执行其名称所描述的操作。如果你传递一些无效字符,它不会引发错误。
构建
在Mac OS X/Unix系统上工作Python库(需要Python 3)
pip install maturin
# finally, install the library in the local virtualenv
maturin develop --cargo-extra-args="--features=python"
构建二进制轮盘并推送到PyPI
# The Mac build requires switching through a few different python versions
maturin build --features python --release --strip
# The linux build is automated through cross-compiling in a docker image
docker run --rm -v $(pwd):/io ghcr.io/pyo3/maturin:main build --features=python --release --strip -f
twine upload target/wheels/*
获取帮助
请将问题作为GitHub问题提出。我们计划很快添加更多文档,但在此期间,“doc”注释包含在源代码中。
贡献
请这样做!我们很高兴讨论可能的添加和/或接受拉取请求。
致谢
从0.4版本开始,解析器算法来自seq_io。虽然它已经略有修改,但主要来自该库。原始文件的链接可在src/parser/fast{a,q}.rs
中找到。
依赖关系
~0.3–6.5MB
~25K SLoC