【问题标题】:Node.js piping gzipped streams in CSV moduleCSV 模块中的 Node.js 管道 gzipped 流
【发布时间】: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 压缩并将其通过管道传输到写入器?

谢谢!

【问题讨论】:

    标签: node.js csv stream


    【解决方案1】:

    您正在通过管道将 csv 传递给作者,因为 .pipe 返回它的链接参数。

    你需要改变:

        .to.stream( gzip.pipe(writer) )  // <-- the output stream 
    

    收件人:

        .to.stream( gzip )  // <-- the output stream  
     . . . 
    gzip.pipe(writer);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      相关资源
      最近更新 更多