9

How to Read CSV Files With Node.js

 2 years ago
source link: https://www.makeuseof.com/node-js-csv-files-read-how/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

How to Read CSV Files With Node.js

By Mary Gathoni Published 15 hours ago

CSV is already one of the simplest data formats, but Node.js makes it even easier to work with.

CSV files are a convenient data-storage format, and you can use them in your Node.js projects to handle anything from configuration to raw data. They can simplify the sharing of information between two apps, even if they’re written in different languages.

In Node.js, you can use several methods to read and write CSV files.

This tutorial shows you how to use the fs module and fast-csv NPM package to read and write CSV files.

Project Setup

To follow along with this tutorial, ensure you have Node.js installed on your machine. Run this command to check:

node -v

It should return a version number. If you don’t have Node.js installed, follow the instruction in this installation tutorial to do so.

In your preferred directory, create a new folder named parse-csv.

mkdir parse-csv

Navigate to parse-csv and create a new file. Name it parseCSV.js.

cd parse-csv
touch parseCSV.js

You can now start working with CSV.

Using the fs Module

The fs (short for file system) module contains several commands for interacting with the file system in Node.js.

Read the Whole File at Once

The readFile() and readFileSync() commands from the fs module enable you to read file content in Node.js. The difference between these commands is that readFileSync() is synchronous—it blocks other JavaScript from executing—while readFile() is asynchronous, or non-blocking.

Since reading CSV files can take a bit of time, especially for large files, it's often better to use the non-blocking command, readFile(), as shown below.

const fs = require('fs');

fs.readFile('csvdemo.csv', 'utf8', function (err, data) {
/* parse data */
});

If you don't have a sample CSV file, you can generate one from mockaroo. You can also learn how to create a CSV file yourself.

Read Line by Line

While readFile() works, it is memory intensive as it reads the whole CSV file all at once. This is a problem, especially when working with large CSV files. An alternative is to read one line at a time using the fs.createReadStream() command.

const fs = require("fs");
const readline = require("readline");
const stream = fs.createReadStream("./csvdemo.csv");
const rl = readline.createInterface({ input: stream });
let data = [];

rl.on("line", (row) => {
data.push(row.split(","));
});

rl.on("close", () => {
console.log(data);
});

Here, you are passing the CSV filename to fs.createReadStream() to create a readable stream. Streams let you work with large amounts of data by allowing you to access it in chunks.

Once you create the readable stream, pass it to readline.createInterface() method. The readline module provides an interface for reading the data one line at a time. You can now push each row to the data array as it’s being read.

Note, however, that this code simply splits each row on commas. Although this will work with the most basic CSV file, the format is actually more complicated than its name implies. Parsing CSV files manually is not a robust approach, especially if you are not in control of the data yourself. For most situations, you should use a CSV library.

Using fast-csv

To parse CSV files reliably, you can use a library like fast-csv, which is available as an npm package. It makes it easier to not only read CSV files but also format them.

To get started, initialize npm and install fast-csv.

npm init -y
npm i fast-csv

Read CSV files using fast-csv as follows.

const fs = require('fs')
const csv = require('fast-csv');
const data = []

fs.createReadStream('./csvdemo.csv')
.pipe(csv.parse({ headers: true }))
.on('error', error => console.error(error))
.on('data', row => data.push(row))
.on('end', () => console.log(data));

In the above code, start by creating a readable stream from the CSV file then connect it to the parse method from fast CSV using pipe(). Note that you are passing the headers option to csv.parse(). This skips the first row. Set headers to false if the first row of your CSV file does not contain headers.

As the CSV file is read one row at a time, you are pushing each row to the data array. After the whole file is read, you can manipulate the contents of the data array as you want.

There’s More Than One Way to Parse a CSV

CSV files are useful for storing large data sets because it’s easy to parse them. In Node.js, you can use the built-in fs module or NPM packages.

Using a library like fast-csv is much easier, and more robust, than writing your own parsing code manually. Some other packages for parsing CSV are csv-parser and papa parser.

About The Author
61ea6a8349dc0-p2v702.jpg?fit=crop&w=100&h=100

Mary Gathoni (18 Articles Published)

Mary Gathoni is a software developer with a passion for creating technical content that is not only informative but also engaging. When she is not coding or writing, she enjoys hanging out with friends and being outdoors.

More From Mary Gathoni

Subscribe to our newsletter

Join our newsletter for tech tips, reviews, free ebooks, and exclusive deals!

Click here to subscribe

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK