Javascript 使用node.js上载后解析CSV的第一行
我需要有上传的CSV是高达350MB的约3000000线。我只需要检查第一行的标题。有没有一种有效的方法可以做到这一点?使用节点csv需要很长时间,因为它正在解析整个过程。我正在使用busyboy并拥有一个流。我从未解析过如此大的文件,但也许您可以尝试和包的组合: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
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');
});