This is a library is aimed at providing fast CSV parsing. It accomplishes this by not handling some of the more complex edge cases such as multi line rows. However it does support escaped values, embedded commas, double and single quotes.
npm install fast-csv
To parse a file.
var csv = require("fast-csv");
csv("my.csv")
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
You may also parse a stream.
var stream = fs.createReadStream("my.csv");
csv(stream)
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
If you expect the first line your csv to headers you may pass a headers option in. Setting the headers option will cause change each row to an object rather than an array.
var stream = fs.createReadStream("my.csv");
csv(stream, {headers : true})
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
You may alternatively pass an array of header names which must match the order of each column in the csv, otherwise the data columns will not match.
var stream = fs.createReadStream("my.csv");
csv(stream, {headers : ["firstName", "lastName", "address"]})
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
You can validate each row in the csv by providing a validate handler. If a row is invalid then a data-invalid event
will be emitted with the row and the index.
var stream = fs.createReadStream("my.csv");
csv(stream, {headers : true})
.validate(function(data){
return data.age < 50; //all persons must be under the age of 50
})
.on("data-invalid", function(data){
//do something with invalid row
})
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
You can transform data by providing in a transform function. What is returned from the transform function will be provided to validate and emitted as a row.
var stream = fs.createReadStream("my.csv");
csv(stream)
.transform(function(data){
return data.reverse(); //reverse each row.
})
.on("data", function(data){
console.log(data):
})
.on("end", function(){
console.log("done");
})
.parse();
MIT https://github.com/C2FO/fast-csv/raw/master/LICENSE
git clone git://github.com/C2FO/fast-csv.git