我基本上是想:
- 打开csv文件作为流
- 对每一行进行一些操作
- 将结果流式传输到第二个csv文件中
在node.js中。
下面是我的代码:
var fs = require("fs");
var csv = require("csv");
var readStream = fs.createReadStream("input.csv");
var writeStream = fs.createWriteStream("output.csv");
var csvStream = csv
.parse()
.on("data", function(data){
//do some stuff with data
return(JSON.stringify(data));
})
.on("end", function(){
console.log("done");
})
.on("error", function(error){
console.log(error)
});
(readStream.pipe(csvStream)).pipe(writeStream);
出现“TypeError:无效的非字符串/缓冲区块””。我做错了什么?我对node.js完全是新手,所以请详细说明您的答案。
2条答案
按热度按时间ih99xse11#
您正在正确阅读数据。但是,使用
return
不是转换数据的正确方法。CSV流无法同时输出未转换的数据(您在data
事件处理程序中读取的数据)和您将通过管道传输到writeStream
的已转换数据。要将
pipe
与writeStream一起使用,您需要一个readableStream来输出转换后的数据。这意味着要围绕转换函数创建一个读/写流,并将fileReader > csvReader > transformStream > writeStream
连接起来。将函数附加到csv阅读器的data
事件要简单得多,就像您所做的那样,但您需要手动写入文件。正确的代码这样编码可能更清楚:
fhity93d2#
我基本上做到了这些:
解析(读取csv字符串并写入对象和数组)
字符串化(读取对象和数组并写入csv字符串)
我把所有这些都用管道传送到我文件中