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 编码
280 每月下载量
在 7 个crate中使用了(5个直接使用)
265KB
749 行
quick-csv
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