BurntSushi/rust-csv
RustA CSV parser for Rust, with Serde support.
csvlibraryrustrust-library
关键指标
Star 增长趋势
Star
2k
Forks
262
周增长
+4
Issues
65
5001k1.5k
2014年3月2016年4月2018年5月2020年6月2022年8月2024年9月2026年10月
制品库crates.io
README
csv
A fast and flexible CSV reader and writer for Rust, with support for Serde.
Dual-licensed under MIT or the UNLICENSE.
Documentation
If you're new to Rust, the tutorial is a good place to start.
Usage
To bring this crate into your repository, either add csv to your
Cargo.toml, or run cargo add csv.
Example
This example shows how to read CSV data from stdin and print each record to stdout.
There are more examples in the cookbook.
use std::{error::Error, io, process};
fn example() -> Result<(), Box<dyn Error>> {
// Build the CSV reader and iterate over each record.
let mut rdr = csv::Reader::from_reader(io::stdin());
for result in rdr.records() {
// The iterator yields Result<StringRecord, Error>, so we check the
// error here.
let record = result?;
println!("{:?}", record);
}
Ok(())
}
fn main() {
if let Err(err) = example() {
println!("error running example: {}", err);
process::exit(1);
}
}
The above example can be run like so:
$ git clone git://github.com/BurntSushi/rust-csv
$ cd rust-csv
$ cargo run --example cookbook-read-basic < examples/data/smallpop.csv
Example with Serde
This example shows how to read CSV data from stdin into your own custom struct. By default, the member names of the struct are matched with the values in the header record of your CSV data.
use std::{error::Error, io, process};
#[derive(Debug, serde::Deserialize)]
struct Record {
city: String,
region: String,
country: String,
population: Option<u64>,
}
fn example() -> Result<(), Box<dyn Error>> {
let mut rdr = csv::Reader::from_reader(io::stdin());
for result in rdr.deserialize() {
// Notice that we need to provide a type hint for automatic
// deserialization.
let record: Record = result?;
println!("{:?}", record);
}
Ok(())
}
fn main() {
if let Err(err) = example() {
println!("error running example: {}", err);
process::exit(1);
}
}
The above example can be run like so:
$ git clone git://github.com/BurntSushi/rust-csv
$ cd rust-csv
$ cargo run --example cookbook-read-serde < examples/data/smallpop.csv