使用Rust CSV模块读取含逗号字段的CSV文件遇问题求优化方案
解决Rust CSV模块解析含逗号的引号字段时的字段数不匹配错误
问题根源很明确:你在构建CSV阅读器时设置了.quoting(false),这会让阅读器完全忽略CSV的引号规则。原本被双引号包裹的"Hi, Mom!"里的逗号会被当成字段分隔符,把一个字段拆成两个,导致这条记录的字段数(4个)和前一条(3个)不一致,触发报错。而.flexible(true)只是让阅读器容忍字段数变化,并没有正确解析带逗号的字段,属于治标不治本的权宜之计。
正确的解决办法是移除.quoting(false)设置,让CSV阅读器默认处理双引号包裹的字段,这样引号内部的逗号就不会被识别为分隔符了。同时可以保留.trim(csv::Trim::All)来处理字段前后的空格。
修改后的代码:
let mut rdr: csv::Reader<fs::File> = csv::ReaderBuilder::new() .trim(csv::Trim::All) .from_path(file)?;
如果你的CSV文件使用了非标准的引号字符(比如单引号),可以通过.quote(b'\'')方法指定自定义引号,示例:
let mut rdr: csv::Reader<fs::File> = csv::ReaderBuilder::new() .trim(csv::Trim::All) .quote(b'\'') .from_path(file)?;
内容的提问来源于stack exchange,提问作者Anonymous Person
相关产品推荐
相关产品推荐

