使用nodejs,我想解析10000个记录的.csv文件,并对每一行进行一些操作.我尝试使用http://www.adaltas.com/projects/node-csv.我不能让它在每一行停下来.这只是读取所有10000条记录.我需要做以下事情
任何人都可以在这里建议任何其他想法?
Ris*_*vik 73
好像你需要使用一些基于流的解决方案,已经存在这样的库,所以在重新发明自己之前,尝试这个库,其中还包括验证支持.https://www.npmjs.org/package/fast-csv
pru*_*ule 48
我当前的解决方案使用异步模块来串行执行:
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);
Run Code Online (Sandbox Code Playgroud)
vin*_*eet 47
我用这种方式: -
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);
});
Run Code Online (Sandbox Code Playgroud)
小智 16
var fs = require("fs");
// READ CSV INTO STRING
var data = fs.readFileSync("your.csv").toLocaleString();
// STRING TO ARRAY
var rows = data.split("\n"); // SPLIT ROWS
rows.forEach((row) => {
columns = row.split(","); //SPLIT COLUMNS
console.log(columns);
})
Run Code Online (Sandbox Code Playgroud)
小智 10
您正在引用的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());
});
});
Run Code Online (Sandbox Code Playgroud)
根据我的经验,我可以说它也是一个相当快速的实现,我一直在处理具有接近10k记录的数据集,并且整个集合的处理时间在合理的几十毫秒级别.
借助jurka的基于流的解决方案建议:node-csv是基于流的,并遵循Node.js的流API.
要在fast-csv中暂停流式传输,您可以执行以下操作:
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)
});
Run Code Online (Sandbox Code Playgroud)
csv-parser
而不是csv-parse
在上面的一些答案中使用. csv-parser
大约两年后来了
csv-parse
. csv-parser
它更好,因为通过它可以很容易地处理标题.首先安装csv-parser:
npm install csv-parser
Run Code Online (Sandbox Code Playgroud)
所以假设你有一个像这样的csv文件:
NAME, AGE
Lionel Messi, 31
Andres Iniesta, 34
Run Code Online (Sandbox Code Playgroud)
您可以执行以下所需的操作:
const fs = require('fs');
const csv = require('csv-parser');
fs.createReadStream(inputFilePath)
.pipe(csv())
.on('data', function(data){
try {
console.log("Name is: "+data.NAME);
console.log("Age is: "+data.AGE);
//perform the operation
}
catch(err) {
//error handler
}
})
.on('end',function(){
//some final operation
});
Run Code Online (Sandbox Code Playgroud)
如需进一步阅读参考
小智 6
该快速CSV NPM模块可以读取数据线,由线从csv文件。
这是一个例子:
let csv= require('fast-csv');
var stream = fs.createReadStream("my.csv");
csv
.fromStream(stream, {headers : true})
.on("data", function(data){
console.log('I am one line of data', data);
})
.on("end", function(){
console.log("done");
});
Run Code Online (Sandbox Code Playgroud)
我需要一个异步 csv 阅读器,最初尝试@Pransh Tiwari 的答案,但无法使用await
和util.promisify()
。最终我遇到了node-csvtojson,它与 csv-parser 几乎一样,但有承诺。以下是 csvtojson 的示例用法:
const csvToJson = require('csvtojson');
const processRecipients = async () => {
const recipients = await csvToJson({
trim:true
}).fromFile('./recipients.csv');
// Code executes after recipients are fully loaded.
recipients.forEach((recipient) => {
console.log(recipient.name, recipient.email);
});
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
206028 次 |
最近记录: |