Javascript 使用node.js上载后解析CSV的第一行

Javascript 使用node.js上载后解析CSV的第一行,javascript,node.js,csv,Javascript,Node.js,Csv,我需要有上传的CSV是高达350MB的约3000000线。我只需要检查第一行的标题。有没有一种有效的方法可以做到这一点?使用节点csv需要很长时间,因为它正在解析整个过程。我正在使用busyboy并拥有一个流。我从未解析过如此大的文件,但也许您可以尝试和包的组合: var es, fs, getLine, getLines; getLine = require('get-line'); fs = require('fs'); es = require('event-stream'); get

我需要有上传的CSV是高达350MB的约3000000线。我只需要检查第一行的标题。有没有一种有效的方法可以做到这一点?使用节点csv需要很长时间,因为它正在解析整个过程。我正在使用busyboy并拥有一个流。

我从未解析过如此大的文件,但也许您可以尝试和包的组合:

var es, fs, getLine, getLines;

getLine = require('get-line');
fs = require('fs');
es = require('event-stream');

getLines = getLine({
    lines: [1],
    encoding: 'utf8'
});

console.time('get first line');
fs.createReadStream('./test.csv', { encoding: 'utf8' })
    .pipe(getLines)
    .pipe(es.map(function(line, next) {
        var data = line.split(',').map(function(c) { return c.trim(); });
        /* this will be called for each line, do your stuff here */
        console.log(data);

        return next(null, line);
    })).pipe(es.wait(function(err, body) {
        /* this is called after the processing of all lines, if you want to do something more */
        /* can be removed if you don't need it */
        console.timeEnd('get first line');
    }));
编辑:刚刚用一个fat csv试用了我的代码(从
star2002
文件,2GB),结果如下:

[ '1',
  '1613423',
  '807',
  '20011015.2226039991',
  '1613424',
  '4518',
  '0',
  '0',
  '654',
  '1395',
  '20011204.1149509996',
  '10.955403',
  '2288071',
  '-0.28820264',
  '0.40731233',
  '10.559091' ]
get first line: 15ms

使用节点csv包的方法可能会出现问题。 在示例中,他们有一个将大型csv文件解析为流的示例。 以下是示例:


get line模块完成了我需要的工作,比不必要地解析300万行要快得多。我现在就用它,但似乎应该有更简单的方法。我试过了,但通读每一行,即使什么都不做,也太慢和没有意义了。
var csv = require('..');
var i = 0

var generator = csv.generate({seed: 1, columns: 2, length: 20});
var parser = csv.parse();
var transformer = csv.transform(function(data){
  i++
  return data.map(function(value){return value.toUpperCase()});
});
var stringifier = csv.stringify();

generator.on('readable', function(){
  while(data = generator.read()){
    parser.write(data);
  }
});
generator.on('end', function(){
  parser.end()
});

parser.on('readable', function(){
  while(data = parser.read()){
    transformer.write(data);
  }
});
parser.on('end', function(){
  transformer.end()
});

transformer.on('readable', function(){
  while(data = transformer.read()){
    stringifier.write(data);
  }
});
transformer.on('end', function(){
  stringifier.end();
});

stringifier.on('readable', function(){
  while(data = stringifier.read()){
    process.stdout.write(data);
  }
});
generator.on('end', function(){
  process.stdout.write('=> ' + i + ' records\n');
});