You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:02:34