#csv #数据类型 #读取器 #解析器 #文件读取器 #数据 #文件路径

csv_perusal

读取CSV文件并返回文件内容,并带有相应的数据类型

12个不稳定版本 (3个重大更改)

0.8.2 2024年7月2日
0.8.1 2024年7月2日
0.7.1 2024年5月6日
0.7.0 2024年3月13日
0.5.2 2023年10月9日

1086解析器实现

Download history 138/week @ 2024-05-03 13/week @ 2024-05-10 5/week @ 2024-05-17 2/week @ 2024-05-24 347/week @ 2024-06-28 42/week @ 2024-07-05 70/week @ 2024-07-26 11/week @ 2024-08-02

81 每月下载次数

Apache-2.0

69KB
1K SLoC

CSV Perusal

A cargo crate,用于读取CSV文件并返回文件内容,并带有相应的数据类型。受Calamine的启发,此包旨在使处理CSV文件更容易。

CSV Perusal旨在将CSV文件中的值上传到关系型数据库。打开CSV文件时返回的是一个二维向量,其中的CSVType 枚举器,每个内部向量作为不同的行。

CSV Perusal非常简单且易于使用。如果您有一个文件路径并且只想解析值,则您需要查找的是 open_csv()。如果您有一个特定的方式使用csv crate打开CSV文件,并且有一个ByteRecords的向量,或者有一个String&str的两维向量,那么您将想要使用get_csv_types()方法。

示例

use csv_perusal::{open_csv, CSVType};

fn main() {
    let path = "test_data/DATA10ROWS.csv";
    let grid = open_csv(path).unwrap();

    grid.iter().for_each(|row| {
        row.iter().for_each(|cell| {
            match cell {
                CSVType::Int(val) => print!("INT:{:?}, ", val),
                CSVType::Float(val) => print!("FLOAT:{:?}, ", val),
                CSVType::String(val) => print!("STRING:{:?}, ", val),
                CSVType::Date(val) => print!("DATE:{:?}, ", val),
                CSVType::Time(val) => print!("TIME:{:?}, ", val),
                CSVType::DateTime(val) => print!("DATETIME:{:?}, ", val),
                CSVType::Error(err) => print!("ERROR:{:?}", err),
                CSVType::Empty => print!("NONE, "),
            }
        });
        print!("\n");
    });
}

输入

id 货币 百分比 日期 日期时间 12小时制时间 24小时制时间
1 $8.70 34.1% 5/28/2023 10/25/2023 19:48 下午5:31 23:02
2 $6.08 90.10% 2/7/2023 11/4/2023 1:58 上午6:47 14:11
3 $6.44 50.10% 7/24/2023 7/4/2023 1:04 中午12:32 17:27
4 $4.99 15.60% 12/29/2022 12/4/2023 11:34 下午5:17 4:53

结果

STRING: "id", STRING: "Money", STRING: "Percent", STRING: "Date", STRING: "DateTime", STRING: "Time12h", STRING: "Time24h",
-----------------------------
INT: 1, FLOAT: 8.7, FLOAT: 0.341, DATE: "2023-05-28", DATETIME: "2023-10-25 19:48:00", TIME: "17:31:00", TIME: "23:02:00",
INT: 2, FLOAT: 6.08, FLOAT: 0.901, DATE: "2023-02-07", DATETIME: "2023-11-04 01:58:00", TIME: "06:47:00", TIME: "14:11:00",
INT: 3, FLOAT: 6.44, FLOAT: 0.501, DATE: "2023-07-24", DATETIME: "2023-07-04 01:04:00", TIME: "12:32:00", TIME: "17:27:00",
INT: 4, FLOAT: 4.99, FLOAT: 0.156, DATE: "2022-12-29", DATETIME: "2023-12-04 11:34:00", TIME: "17:17:00", TIME: "04:53:00",

注意事项

  • 百分比和货币会被转换为浮点数
  • 时间和日期将由Chrono格式化
    • 它将首先尝试 mm/dd/yyyyyyyy/mm/dd 格式,但如果月份值大于 12,则将改为 dd/mm/yyyyyyyy/dd/mm。请注意,如果您有 dd/mm/yyyy 格式的日期,例如 2/11/2024,将被读取为 2 月 11 日而不是 11 月 2 日。
    • 将以 yyyy-mm-dd 的格式输出日期,但您可以使用 Chrono 包来更改格式。
    • 当前解析:mm/dd/yyyydd/mm/yyyyyyyy/mm/ddyyyy/dd/mmm/dd/yyyymm/d/yyyydd/m/yyyyyyyy/mm/dyyyy/dd/myyyy/m/ddm/d/yyyyyyyy/m/dmm/dd/yydd/mm/yym/dd/yymm/d/yydd/m/yyyy/m/ddyy/mm/dyy/dd/mm/d/yyyy/m/d
  • 时间是以 24 小时制表示,但也可以使用 Chrono 改为 12 小时制。

依赖项

~6–8.5MB
~140K SLoC