使用Rust的CSV crate打印表头时去引号问题求助
CSV表头打印时部分字段保留引号的解决方法
问题场景
使用Rust的csv crate读取CSV文件,通过Clap传递文件路径正常,但打印表头时,仅第一个字段Index不带引号,其余字段如Height(Inches)仍保留原始引号,期望所有表头字段都不带引号。
当前代码:
let mut rdr = csv::Reader::from_path(file)?; let column_names = rdr.headers(); println!("{}", match column_names { Ok(v) => v.as_slice(), Err(_) => "Error!" });
CSV文件样例:
"Index", "Height(Inches)", "Weight(Pounds)" 1, 65.78331, 112.9925 2, 71.51521, 136.4873 3, 69.39874, 153.0269
实际输出:
Index "Height(Inches)" "Weight(Pounds)"
问题原因
headers().as_slice()返回的是CSV表头行的原始字节切片,完全保留了文件中的引号、空格等原始格式。而csv crate在解析时已经自动去除了每个字段的引号,只是你没有使用解析后的单个字段,而是直接输出了整行原始内容。
解决方案
遍历解析后的单个表头字段,将它们用指定分隔符拼接成字符串,即可得到无引号的表头:
修改后的代码:
let mut rdr = csv::Reader::from_path(file)?; match rdr.headers() { Ok(headers) => { // 用空格分隔拼接所有表头字段 let header_str = headers.iter().collect::<Vec<_>>().join(" "); println!("{}", header_str); } Err(_) => println!("Error!"), }
执行后输出:
Index Height(Inches) Weight(Pounds)
如果需要保留逗号分隔的格式,只需修改分隔符:
let header_str = headers.iter().collect::<Vec<_>>().join(", ");
对应输出:
Index, Height(Inches), Weight(Pounds)
内容的提问来源于stack exchange,提问作者Anonymous Person
相关产品推荐
相关产品推荐

