从原CSV生成新CSV时缺失3.5K行的问题排查求助
提取CSV指定列后行数缺失问题
我从现有CSV文件提取指定列生成新CSV,文件成功生成,但新文件比原文件少了约3500行。用相同代码处理其他CSV完全正常,怀疑问题出在这个由XLSX转换而来的原CSV文件,但找不到具体原因。
所用代码:
var ar = []; fs.createReadStream(`${inpath}.csv`) .on("error", (err) => { console.log("error agya"); throw err; }) .pipe(csv()) .on("data", (row) => { ++j; ar.push({ key: row.Key, geoHash: latLonGeoHash.encode(row.Latitude, row.Longitude,6), latitude: row.Latitude, longitude: row.Longitude }); }) .on("end", () => { stringify( ar, { header: true, }, function (err, output) { fs.writeFile( `${outpath}.csv`, output, (err) => err && console.log(err) ); } ); console.log("khtm"); });
排查建议:
- 检查原CSV格式问题:XLSX转CSV时容易出现单元格内换行未正确转义、引号不匹配的情况,导致csv解析器把多行合并成一行,或者直接跳过无效行
- 给解析逻辑加错误捕获:
latLonGeoHash.encode可能因为Latitude/Longitude为空、非数值而报错,一旦报错会直接终止流,导致后续行都无法处理。可以在data事件里加try-catch:.on("data", (row) => { ++j; try { ar.push({ key: row.Key, geoHash: latLonGeoHash.encode(row.Latitude, row.Longitude,6), latitude: row.Latitude, longitude: row.Longitude }); } catch (e) { console.log(`第${j}行解析失败:`, row, e); } }) - 核对行数统计:在
end事件里打印console.log("解析到的行数:", j),再用命令行wc -l 原文件路径.csv统计原文件总行数,确认是解析阶段丢行还是写入阶段丢行 - 检查原CSV的无效行:比如空行、缺少Key/Latitude/Longitude的行,这类行可能被解析器忽略,或者代码处理时出错
- 更换CSV解析库:比如改用
papaparse这类容错性更强的库,看是否能解析出全部行
内容的提问来源于stack exchange,提问作者Salil Hardeniya
相关产品推荐
相关产品推荐

