我有一个gzip压缩的CSV文件,我想阅读,执行一些转换,然后回写gzipped。我正在使用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;
});
问题是这些代码有效地写入了具有指定名称的文件,尽管没有gzip压缩,即如果文件被删除了.gz,它可以作为常规CSV打开。
接下来的问题是,如何将csv()。to.stream()传递给gzip数据并将其传递给编写器的输出流?
谢谢!
答案 0 :(得分:2)
您正在将csv传递给作者,因为.pipe
会返回它的链接参数。
您需要更改:
.to.stream( gzip.pipe(writer) ) // <-- the output stream
要:
.to.stream( gzip ) // <-- the output stream
. . .
gzip.pipe(writer);