#csv #解析器 #读取 #操作 #I/O #信息 #数据

csv-tools

一个用于轻松读取、创建和操作 CSV 文件的 Rust crate

3 个稳定版本

1.1.1 2024 年 3 月 27 日
1.0.0 2024 年 3 月 18 日

#1109解析器实现

Download history 30/week @ 2024-07-02

53 每月下载次数

MIT 许可证

55KB
1K SLoC

CSV 工具

一个 Rust crate,可以轻松读取、操作和创建 CSV 文件,支持双引号和转义字符。

如何使用

有关该 crate 的各个方法的更多信息,请参阅 crates.io 中的文档。

目前这个 crate 不使用任何外部依赖。

简单概述

以下是一个基本概述,以下是一个示例 (langs.csv)

language,level_of_fun,level_of_difficulty
C++,10,8
Rust,10,9
JavaScript,9,1
TypeScript,10,1
Java,0,2
HTML,10,-1
GDScript,10,1
Lua,7,1

读取文件

use csv_tools::CSVFile;

let filename = String::from("langs.csv");
let file = CSVFile::new(&filename, &',')?;

assert_eq!(file.columns, vec![
  "language".to_string(),
  "level_of_fun".to_string(),
  "level_of_difficulty".to_string()
]);

assert_eq!(file.rows, vec![
  vec!["C++".to_string(),        "10".to_string(),  "8".to_string()],
  vec!["Rust".to_string(),       "10".to_string(),  "9".to_string()],
  vec!["JavaScript".to_string(), "9".to_string(),   "1".to_string()],
  vec!["TypeScript".to_string(), "10".to_string(),  "1".to_string()],
  vec!["Java".to_string(),       "0".to_string(),   "2".to_string()],
  vec!["HTML".to_string(),       "10".to_string(), "-1".to_string()],
  vec!["GDScript".to_string(),   "10".to_string() , "1".to_string()],
  vec!["Lua".to_string(),        "7".to_string(),   "1".to_string()],
]);

这里有很多实用方法可以帮助你更容易地操作数据

// continuing with the above example
// ...

use csv_tools::CSVCoords;

// get the value at specific coordinates
assert_eq!(file.get_cell(&CSVCoords { row: 0, column: 0 }), Some(&"C++".to_string()));

将 CSV 映射到数据结构

// continuing with the above example
// ...

#[derive(Debug, PartialEq)]
struct Language {
    name: String,
    level_of_fun: i32,
    level_of_difficulty: i32,
}

// mapped_rows is a vector of Language.
let mapped_rows = file.map_rows(|row: &Vec<String>| {
    Language {
        name: row[0].clone(),
        level_of_fun: row[1].parse().unwrap(),
        level_of_difficulty: row[2].parse().unwrap(),
    }
});

assert_eq!(mapped_rows.len(), 8);
assert_eq!(
    mapped_rows[0],
    Language {
        name: "C++".to_string(),
        level_of_fun: 10,
        level_of_difficulty: 8
    }
);

你还有以下方法

  • find_text
  • check_validity
  • trim_end
  • trim_start
  • trim
  • merge (用于合并 CSV 文件)
  • ...

无运行时依赖