我正在尝试在 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/