我正在使用csv和serdecrates 来反序列化 csv 文件。问题是最后一个字段实际上是一个逗号分隔的列表。
field1,field2,field3
xx, xx, str1, ..., strN
xx, xx,
xx, xx, str1, ..., strM
Run Code Online (Sandbox Code Playgroud)
这就是它在 Rust 中的映射方式,.flexible(true)在阅读器上阅读它:
#[derive(Debug, Deserialize)]
struct Row {
field1: isize,
field2: isize,
field3: Vec<String>,
}
Run Code Online (Sandbox Code Playgroud)
如果 CSV 具有,field3标题行,则一切正常。但有些文件没有它,我找不到让 serde 仍然填充Vec. 我所能做的就是#[serde(default)]放空field3。
这是一个 Rust游乐场,显示了问题:
field1,field2,field3
xx, xx, str1, ..., strN
xx, xx,
xx, xx, str1, ..., strM
Run Code Online (Sandbox Code Playgroud)
在读取行之前手动添加字段标题应该使用headers()and set_headers():
let rdr = reader.headers().unwrap();
if let None = rdr.get(2) {
let mut rdr = rdr.clone();
rdr.push_field("field3");
reader.set_headers(rdr);
}
Run Code Online (Sandbox Code Playgroud)
然而,那又快又脏。