在用node.js上传后parsingCSV的第一行

我需要上传大约350万行,大约300万行的cvs。 我只需要检查第一行的标题。 有没有一个有效的方法来做到这一点? 使用node-csv需要很长时间,因为它正在parsing整个事情。 我正在使用busyboy,并有一个stream。

我从来没有必要parsing这么大的文件,但也许你可以尝试事件stream和获取线包的组合:

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'); })); 

编辑:刚刚尝试我的代码与从这里 ( star2002文件,2GB)的胖csv,这里是结果:

 [ '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 

使用node-csv包的方法可能会出现问题。 在这些示例中,他们有一个将大型csv文件parsing为stream的示例。 以下是来自github的示例:

 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'); });