【发布时间】:2014-09-13 21:56:06
【问题描述】:
我有一个压缩过的 CSV 文件,我想读取它,执行一些转换,然后在压缩后的某个地方写回。我正在使用 node-csv 模块进行 CSV 转换。
代码的简化版本如下所示:
// dependencies
var fs = require('fs'),
zlib = require('zlib'),
csv = require('csv'); // http://www.adaltas.com/projects/node-csv/
// filenames
var sourceFileName = process.argv[2] || 'foo.csv.gz';
targetFileName = process.argv[3] || 'bar.csv.gz';
// streams
var reader = fs.createReadStream(sourceFileName),
writer = fs.createWriteStream(__dirname + '\\' + targetFileName),
gunzip = zlib.createGunzip(),
gzip = zlib.createGzip();
csv()
.from.stream( reader.pipe(gunzip) )
.to.stream( gzip.pipe(writer) ) // <-- the output stream
.transform( function(row) {
// some operation here
return row;
});
问题是这段代码有效地写入了一个具有指定名称的文件,虽然没有压缩,即如果文件删除了 .gz,它可以作为常规 CSV 文件打开。
那么问题是,如何将 csv().to.stream() 传递给一个输出流,该输出流对数据进行 gzip 压缩并将其通过管道传输到写入器?
谢谢!
【问题讨论】: