我正在尝试根据属性字段的值将CSV拆分为新的CSV文件。在测试了几个不同的模块后,看起来像fast-csv是一个不错的选择。但是,我需要一些关于如何按属性拆分文件的帮助。
我最初想过做一个转换:
.transform(function(data){
if (data.AttributeValue == '10') {
return {
data
};
} else if (data.AttributeValue == '5') {
return {
data
};
} else {
data
})
})
或者我可以使用验证:
.validate(function(data){
return data.AttributeValue == '10';
})
我需要帮助的是使用哪一个以及如何将数据行发送到不同的writeStreams。
.pipe(fs.createWriteStream("10.csv", {encoding: "utf8"}));
.pipe(fs.createWriteStream("5.csv", {encoding: "utf8"}));
.pipe(fs.createWriteStream("Other.csv", {encoding: "utf8"}));
我已经在Python中完成了这项工作,但是尝试将其迁移到Node比我想象的要复杂。
由于
答案 0 :(得分:0)
您可以使用类似的方法将数据从验证测试发送到另一个函数。
.validate(function(data){
if(data.attribute = '10'){
ten(data);
} else {
notTen(data);
}
});
然后您可以简单地使用CSV编写器写出CSV,对于您打开csv编写器所需的每个CSV:
var csvStream = csv.createWriteStream({headers: true}),
writableStream = fs.createWriteStream("not10.csv");
writableStream.on("finish", function(){
console.log("DONE!");
});
csvStream.pipe(writableStream);
function writeToCsv(data){
csvStream.write(data);
}
重复您需要写入的每个CSV。
可能不是最好的方法,但我对此很新,而且似乎有效。