#csv #csv-tsv #tsv #slice #file-header #dataset #command

bin+lib csv-guillotine

CSV 文件通常在数据标题之前有元数据。这将删除它。

9 个版本

0.3.5 2019 年 5 月 27 日
0.3.4 2019 年 5 月 27 日
0.2.0 2019 年 5 月 3 日
0.1.1 2019 年 4 月 30 日

#13#tsv

Download history 6/week @ 2024-03-28 11/week @ 2024-04-04 2/week @ 2024-06-06 1/week @ 2024-06-13

89 每月下载量

MIT 许可证

22KB
502

CSV Guillotine

Build Status

目的

许多银行、股票经纪人和其他大型机构允许您以 CSV 文件的形式下载您的账户历史记录。这是好的,值得赞扬,但他们通常会在文件顶部包含一个额外的元数据标题来解释它。CSV 文件可能看起来像以下这样

Account:,****07493
£4536.24
£4536.24

Transaction type,Description,Paid out,Paid in,Balance
Bank credit YOUR EMPLOYER,Bank credit YOUR EMPLOYER,,£2016.12,£4536.24
Direct debit CREDIT PLASTIC,CREDIT PLASTIC,£402.98,,£520.12

对于许多用户来说,这很好,因为它仍然可以被加载到电子表格应用程序中。

对于我的用例,我需要下载这些文件中的许多,这些文件组成一个大型数据集,这些额外的元数据标题是一个大问题,因为我不能再使用 xsv 直接解析它们。

这个库是一种缓冲区,它可以删除这个元数据标题。它通过查看给定行数中的字段数,在达到最大值之前删除行来实现。

编译

要编译,请从 rustup 安装 rust,检出此存储库并运行

    cargo install --path .

命令行使用

它可以像以下这样使用

    cat with_metadata_headers.csv | csv-guillotine --separator=',' --consider=20 > csv_header_and_data only.csv

    csv-guillotine -i with_metadata_headers.csv -o csv_header_and_data only.csv

查看 csv-guillotine --help 获取完整的用法说明

错误将打印到标准错误,可以通过退出状态检测其存在。

注意:此软件不会实际验证您的 CSV。

库使用

此库公开了一个 Blade 类,该类使用一个 Read 以及一个字符(表示为 u8)和行限制来构造。可以使用 Blade 类作为 Read 来获取实际数据。

以下是一个示例

    extern crate csv_guillotine;
    use std::io::{BufRead, BufReader};
    use csv_guillotine::Blade;

    fn main() {

        let stdin = std::io::stdin();
        let blade = Blade::new(stdin, 44, 20);
        let mut buf_reader = BufReader::new(blade);

        let mut read_size = 1;
        while read_size != 0 {
            let mut buffer = String::new();
            match buf_reader.read_line(&mut buffer) {
                Ok(r) => {
                    print!("{}", buffer);
                    read_size = r;
                },
                Err(e) => {
                    eprintln!("ERROR: {}", e);
                }
            }
        }

    }

版本

  • 0.3.5 - 允许在二进制中允许制表符分隔的 CSV 文件(即 TSV)。
  • 0.3.4 - 将 Blade (lib.rs) 转换为 Blade (泛型),而不是使用内部 Box 字段。
  • 0.3.3 - 更规范的项目布局和更简洁的代码。
  • 0.3.2 - 更规范的项目布局和更简洁的代码。
  • 0.3.1 - 提高测试覆盖率并修复错误。
  • 0.3.0 - 使用字节代替 String 进行所有操作,以便可以处理非 UTF8 文件。
  • 0.2.0 - 添加命令行程序
  • 0.1.1 - 将主类重命名为 Blade,以符合 guillotine 主题
  • 0.1.0 - 第一个版本

依赖项

~1.3–1.8MB
~23K SLoC