rust-csv

Rust的CSV解析器,支持Serde。(A CSV parser for Rust, with Serde support.)

Github stars Tracking Chart

csv

A fast and flexible CSV reader and writer for Rust, with support for Serde.

Linux build status
Windows build status

Dual-licensed under MIT or the UNLICENSE.

Documentation

https://docs.rs/csv

If you're new to Rust, the
tutorial
is a good place to start.

Usage

Add this to your Cargo.toml:

[dependencies]
csv = "1.1"

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;
use std::io;
use std::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;
use std::io;
use std::process;

use serde::Deserialize;

#[derive(Debug, 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

Overview

Name With OwnerBurntSushi/rust-csv
Primary LanguageRust
Program languageRust (Language Count: 3)
PlatformCross-platform
License:The Unlicense
Release Count96
Last Release Name1.3.0 (Posted on 2023-10-03 09:16:06)
First Release Name0.2.0 (Posted on )
Created At2014-03-22 06:58:51
Pushed At2024-04-20 12:28:44
Last Commit At2023-10-10 09:45:23
Stargazers Count1.6k
Watchers Count16
Fork Count209
Commits Count457
Has Issues Enabled
Issues Count225
Issue Open Count56
Pull Requests Count63
Pull Requests Open Count30
Pull Requests Close Count32
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top