DEV Community

Mahesh K
Mahesh K

Posted on

Read CSV File using Node JS

I am currently working on a business project that exports the processed data to CSV file. I wanted to process that into the dashboard. I can choose python or any other backend language to read the CSV file. However, I have found out that node js may be much better option. I already have the node on the front end side. So I thought If I can process this using node. And make it available in the dashboard so that I don't have to waste much time with other language.

Here's simple code that got me started. You can also check out Read CSV with Node JS video for alternative explanation.

Check out the example code below that got me started. There's a lot more to be done to extend the below code. Like say if I wish to take the data from the mysql and export it to CSV then I have to change read to write operation.

const fs = require('fs'); 
const csv = require('csv-parser');

fs.createReadStream(inputFilePath)
.pipe(csv())
.on('data', function(data){
    try {
        //perform the operation
    }
    catch(err) {
        //error handler
    }
})
.on('end',function(){
    //some final operation
});  
Enter fullscreen mode Exit fullscreen mode

Here's the CSV module that I have used. I think there are plenty of npm modules that you can check out. But the CSV parser seems to be simple and gets the job done.

What's your favorite node module for the CSV parsing?

Discussion (12)

Collapse
itsasine profile image
ItsASine (Kayla) • Edited

I just use fs.

require('fs');
// ...
readFile: function(path) {
    var fileContent;

    return new Promise(function(resolve) {
        fileContent = fs.readFileSync(path, {encoding: 'utf8'});
        resolve(fileContent);
    });
}

When I use the contents of the file, it's like

stuff,stuff,stuff,stuff,stuff\r\n
thing,thing,thing,thing,thing\r\n
thing,thing,thing,thing,thing\r\n
thing,thing,thing,thing,thing\r\n
thing,thing,thing,thing,thing\r\n
thing,thing,thing,thing,thing

which is good enough for my purposes.

Collapse
anh3h profile image
Ang3h Courage

typo: fileContent = fs.readFileSync(path, {encoding: 'utf8'});

Collapse
itsasine profile image
ItsASine (Kayla)

Fixed it now, thanks :)

Collapse
isalevine profile image
Isa Levine

Hi Kayla, this is awesome! Do you mind if I link to this code snippet in a CSV-parsing dev.to article I'm working on? I'd love to include a purely fs solution. :)

Collapse
itsasine profile image
ItsASine (Kayla)

Go for it! :)

Thread Thread
isalevine profile image
Isa Levine

Thank you!! Here's the link to the article, with the link to your snippet in the conclusion. :)

dev.to/isalevine/parsing-csv-files...

Collapse
graciano profile image
graciano codes

Do you know if there is a way to use this lib on the browser using an input file?
Because from an input file I don't know if I can read the file as a stream, only as an ArrayBuffer, from the FileReader API...

Collapse
tahorsuijuris profile image
TahorSuiJuris

Question, please:

Why does this only return the first character of the string?

    const searchkeywords = fs.readFileSync('kwords.csv','utf-8');
        for (let kword of searchkeywords) {
    console.log(`Search Keyword: ${kword}`);

Text for the first 10 rows is:

"1-800-FLOWERS.COM, INC.",
"1ST SOURCE",
"1ST SOURCE CORP",
"3D SYSTEMS",
"8X8, INC.",
"A.H. BELO",
"AAON",
"AARON RENTS",
"ABERCROMBIE & FITCH",
"ABIOMED",

Collapse
ignoreintuition profile image
Brian Greig

I generally prefer to use something like csvtojson and get it into a format that is easier to parse.

Collapse
stevehsu profile image
Steve Hsu

Thanks! It saved me.

Collapse
abusedmedia profile image
Fabio Franchino

I wrote an article a while ago possibly related: fabiofranchino.com/blog/merging-cs...

Collapse
maheshkay profile image
Mahesh K Author

This is handy for sure. Thanks a lot.