NodeJs读取csv文件

有了nodejs,我想parsing10000条logging的.csv文件,并对每一行进行一些操作。 我尝试使用http://www.adaltas.com/projects/node-csv 。 我不能得到这个在每一行暂停。 这只读取所有10000条logging。 我需要做以下

1)逐行读取csv 2)在每行上执行耗时的操作3)转到下一行

任何人都可以在这里build议任何其他的想法

似乎你需要使用一些基于stream的解决scheme,在重新创build自己之前就已经有了这样的库,试试这个库,其中还包括validation支持。 https://www.npmjs.org/package/fast-csv

我目前的解决scheme使用asynchronous模块来执行系列:

var fs = require('fs'); var parse = require('csv-parse'); var async = require('async'); var inputFile='myfile.csv'; var parser = parse({delimiter: ','}, function (err, data) { async.eachSeries(data, function (line, callback) { // do something with the line doSomething(line).then(function() { // when processing finishes invoke the callback to move to the next one callback(); }); }) }); fs.createReadStream(inputFile).pipe(parser); 

我用这种方式:

 var fs = require('fs'); var parse = require('csv-parse'); var csvData=[]; fs.createReadStream(req.file.path) .pipe(parse({delimiter: ':'})) .on('data', function(csvrow) { console.log(csvrow); //do something with csvrow csvData.push(csvrow); }) .on('end',function() { //do something wiht csvData console.log(csvData); }); 

您所引用的node-csv项目对于转换大部分CSV数据中的每一行的任务完全足够,可以从http://csv.adaltas.com/transform/上的文档获取:;

 csv() .from('82,Preisner,Zbigniew\n94,Gainsbourg,Serge') .to(console.log) .transform(function(row, index, callback){ process.nextTick(function(){ callback(null, row.reverse()); }); }); 

根据我的经验,我可以说这也是一个相当快的实现,我一直在使用它的数据集上有近10k条logging,处理时间在整个集合中处于合理的几十毫秒的水平。

扣留jurka的基于stream的解决schemebuild议:基于node-csv ISstream,遵循Node.js的streamAPI。

尝试一行行npm插件。

 npm install line-by-line --save 

为了在fast-csv中暂停数据stream,您可以执行以下操作:

 let csvstream = csv.fromPath(filePath, { headers: true }) .on("data", function (row) { csvstream.pause(); // do some heavy work // when done resume the stream csvstream.resume(); }) .on("end", function () { console.log("We are done!") }) .on("error", function (error) { console.log(error) });