节点:按值拆分CSV

时间:2015-03-13 11:21:25

标签: node.js csv

我正在尝试根据属性字段的值将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比我想象的要复杂。

由于

1 个答案:

答案 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。

可能不是最好的方法,但我对此很新,而且似乎有效。