6个版本

使用旧Rust 2015

0.1.6 2016年9月29日
0.1.5 2016年5月27日
0.1.4 2016年2月26日
0.1.3 2015年12月12日

#2140 in 编码

Download history 71/week @ 2024-03-13 77/week @ 2024-03-20 93/week @ 2024-03-27 99/week @ 2024-04-03 84/week @ 2024-04-10 52/week @ 2024-04-17 70/week @ 2024-04-24 73/week @ 2024-05-01 62/week @ 2024-05-08 97/week @ 2024-05-15 72/week @ 2024-05-22 69/week @ 2024-05-29 80/week @ 2024-06-05 75/week @ 2024-06-12 57/week @ 2024-06-19 52/week @ 2024-06-26

280 每月下载量
7 个crate中使用了(5个直接使用)

MIT 许可证

265KB
749

quick-csv

Build Status

Quick Csv reader which performs very well.

This library has been hugely inspired by Andrew Gallant's (@BurntSuchi) excellent rust-csv. In particular, most tests and benchmarks are a simple copy-paste from there.

文档

示例

首先,从一个 BufRead 读取器、文件或字符串中创建一个 Csv

extern crate quick_csv;

fn main() {
    let data = "a,b\r\nc,d\r\ne,f";
    let csv = quick_csv::Csv::from_string(data);
    for row in csv.into_iter() {
        // work on csv row ...
        if let Ok(_) = row {
            println!("new row!");
        } else {
            println!("cannot read next line");
        }
    }
}

Row 提供了3种方法来访问csv列

  • :

    • 列的迭代器。
    • 迭代器项是一个 &str,这意味着你只需要 parse() 它到所需的类型,就完成了
    let row = quick_csv::Csv::from_string("a,b,c,d,e,38,f").next().unwrap().unwrap();
    let mut cols = row.columns().expect("cannot convert to utf8");
    let fifth = cols.nth(5).unwrap().parse::<f64>().unwrap();
    println!("Doubled fifth column: {}", fifth * 2.0);
    
  • 解码:

    • 将数据反序列化为你的 Decodable 结构体,类似于 rust-csv。
    • 处理csv数据的最方便的方式
    let row = quick_csv::Csv::from_string("a,b,54").next().unwrap().unwrap();
    if let Ok((col1, col2, col3)) = row.decode::<(String, u64, f64)>() {
        println!("col1: '{}', col2: {}, col3: {}", col1, col2, col3);
    }
    
  • bytes_columns:

    • 类似于 columns,但列的类型是 &[u8],这意味着你可能需要先将其转换为 &str
    • columns 相比,性能提升很小,只有当你真的需要时才使用它,因为它不太方便

基准测试

rust-csv

我主要将这个基准测试与 rust-csv 进行比较,它已经非常快。即使我没有 raw 版本,我也尝试提供类似的方法。

正常基准

quick-csv
test bytes_records   ... bench:   3,955,041 ns/iter (+/- 95,122) = 343 MB/s
test decoded_records ... bench:  10,133,448 ns/iter (+/- 151,735) = 133 MB/s
test str_records     ... bench:   4,419,434 ns/iter (+/- 104,107) = 308 MB/s

rust-csv (0.14.3)
test byte_records    ... bench:  10,528,780 ns/iter (+/- 2,080,735) = 128 MB/s
test decoded_records ... bench:  18,458,365 ns/iter (+/- 2,415,059) = 73 MB/s
test raw_records     ... bench:   6,555,447 ns/iter (+/- 830,423) = 207 MB/s
test string_records  ... bench:  12,813,284 ns/iter (+/- 2,324,424) = 106 MB/s

大基准

使用3.6GB文件,如基准大README中所述

go:        187 seconds
rust-csv:   23 seconds
quick-csv:   9 seconds

csv-game

在编写此内容时,quick-csv是 csv-game 上最快的csv

许可证

MIT

依赖项