javascript - 当 3 列具有相同标题时,在 node.js 中使用 fast-csv 读取 csv

标签 javascript node.js csv header fast-csv

我正在尝试在 Node.js 中使用 fast-csv 读取 CSV 文件。 csv 文件的标题行包含 90 列。其中87个有独特的名字。但 3 列具有相同的标题名称“Transformation”。这显然是一个语义错误。 Fast-csv 提示 header 不唯一并且不读取 CSV。我知道,所有列名称都应该不同,但这就是我获取 CSV 文件的方式。有没有办法读取标题,并且如果某列具有另一列的名称,则该名称会自动转换为“Transformation_int”,其中 int 是一些随机数?

csv.parseFile(csvFileName,
       { headers: true, delimiter: ";", 
         headers: headers => headers.map(
          h => {h.replace( /[\r\n]+/gm, " " )}) 
        })
    .on ("data", function (row) { <doing something> })
    .on ("error", error => {console.log("This error occured:",error)})
    .on ("end", () => {      console.log("Import finished")});

最佳答案

你根本不能使用标题,那么第一行将包含标题,你可以根据需要引用第一行手动处理其余数据,甚至保留重复的名称:

headers: false

或者,您可以传递一个转换函数来检测重复项,并重命名它们

这是一个通过添加随机数来重命名重复 header 的简单示例:

csv.parseFile(csvFileName, {
        delimiter: ";",
        headers: headers => {

            // rename duplicate
            headers.map((el, i, ar) => {
                if (ar.indexOf(el) !== i) {
                    headers[i] = `${el}_${i}`;
                }
            });

            return headers;
        }
    })
    .on("data", function(row) {
        console.log('row', row);
    })
    .on("error", error => {
        console.log("This error occured:", error)
    })
    .on("end", () => {
        console.log("Import finished")
    });

关于javascript - 当 3 列具有相同标题时,在 node.js 中使用 fast-csv 读取 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72745123/

相关文章:

node.js - 生成CSV文件时如何处理分号?

javascript - 将表格行数据传递给点击功能

javascript - 根据日期消除数组条目

mysql - 当出现此错误时如何解决此错误

javascript - 使用attr替换html宽度标签

csv - ArangoDB 将 csv 导入边缘(图表)

python - :doy:sod format 年的 Pandas date_parser 函数

javascript 关闭按钮不起作用

javascript - 为什么 getElementsByTagName 在这个逻辑中不起作用?

javascript - 当我尝试使用 npm 安装 Brain.js 时出现此错误