#csv #file-format #sniffer #detect #field-name #data #qsv

bin+lib qsv-sniffer

为 Rust 设计的 CSV 文件格式嗅探器,针对 qsv 优化

21 个版本

0.10.3 2024年3月31日
0.10.1 2023年12月20日
0.10.0 2023年8月1日
0.9.4 2023年6月7日
0.2.1 2022年3月19日

#255解析实现

Download history 314/week @ 2024-04-20 389/week @ 2024-04-27 331/week @ 2024-05-04 225/week @ 2024-05-11 370/week @ 2024-05-18 410/week @ 2024-05-25 352/week @ 2024-06-01 352/week @ 2024-06-08 377/week @ 2024-06-15 454/week @ 2024-06-22 353/week @ 2024-06-29 287/week @ 2024-07-06 342/week @ 2024-07-13 620/week @ 2024-07-20 697/week @ 2024-07-27 517/week @ 2024-08-03

2,215 每月下载量
2 crates 中使用

MIT 许可证

56KB
1K SLoC

qsv CSV 嗅探器

Documentation

qsv-sniffer 提供了推断 CSV 文件元数据(分隔符选择、引号字符、字段数量、字段名称、字段数据类型等)的方法。请参阅文档以获取更多信息。

它是 csv-sniffer 的独立分支,具有以下额外功能,检测

  • utf-8 编码
  • 字段名称
  • 行数
  • 平均记录长度
  • 额外的数据类型 - 日期/日期时间以及 NULL
  • 更智能的布尔类型检测 - "true" 和 "false" 不是它检测的唯一布尔值。现在它还检测 1/0、yes/no、y/n、true/false、t/f - 不区分大小写

ℹ️ 注意: 此分支针对 qsv 进行优化,其开发将主要受 qsv 需求的支配。

设置

作为命令行应用程序

cargo install qsv-sniffer

这将安装一个名为 sniff 的二进制文件。

作为库

将其添加到您的 Cargo.toml

[dependencies]
qsv-sniffer = "0.9"

并将此添加到您的 crate 根目录

use qsv_sniffer;

功能标志

  • cli - 构建名为 sniff 的二进制文件
  • runtime-dispatch-simd - 启用在运行时检测 SIMD 功能,这允许使用 SSE2 和 AVX2 代码路径(仅在 Intel 和 AMD 架构上有效。在其他架构上忽略)。
  • generic-simd - 启用与架构无关的 SIMD 功能,但仅适用于 Rust 夜间构建版本。

这些 SIMD 功能互斥且可提高采样性能。

示例

此示例展示了如何编写一个简单的命令行工具以发现 CSV 文件的元数据

use qsv_sniffer;

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() != 2 {
        eprintln!("Usage: {} <file>", args[0]);
        ::std::process::exit(1);
    }

    // sniff the path provided by the first argument
    match qsv_sniffer::Sniffer::new().sniff_path(&args[1]) {
        Ok(metadata) => {
            println!("{}", metadata);
        },
        Err(err) => {
            eprintln!("ERROR: {}", err);
        }
    }
}

此示例是该 crate 的主要二进制文件。在源目录中,可以像以下这样运行它

$ cargo run -- tests/data/library-visitors.csv

依赖项

~7–14MB
~137K SLoC