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
89 每月下载量
22KB
502 行
CSV Guillotine
目的
许多银行、股票经纪人和其他大型机构允许您以 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