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

Download history 1424/week @ 2024-04-16 1735/week @ 2024-04-23 1244/week @ 2024-04-30 3076/week @ 2024-05-07 1506/week @ 2024-05-14 1142/week @ 2024-05-21 1285/week @ 2024-05-28 2223/week @ 2024-06-04 2295/week @ 2024-06-11 1833/week @ 2024-06-18 1948/week @ 2024-06-25 1089/week @ 2024-07-02 1737/week @ 2024-07-09 977/week @ 2024-07-16 2044/week @ 2024-07-23 3066/week @ 2024-07-30

每月下载量 8,236
57crate(直接使用45个)中使用

MIT 许可证

100KB
2K SLoC

CI crates.io

针尾鸟

针尾鸟是一个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);
}

安装

针尾鸟需要安装rustcargo。请使用您本地的包管理器(homebrewapt-getpacman等)或通过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