Retour aux articles

Comment importer un fichier CSV avec nodeJS ?

importer un fichier csv en nodejs
5 minutes de lecture- 190 vues

J'ai récemment eu besoin d'extraire les données d'un fichier CSV pour les persister en base de données. On avait besoin de les exploiter sur une application web, et les récupérer via une API nous paraissait plus simple que lire le fichier CSV à chaque requête.

J'ai découvert la librairie csv-parser qui m'a permi de convertir mon fichier CSV en JSON assez rapidement.

Pré-requis

Configurer notre projet NodeJS

Nous allons générer une nouvelle application node.js afin de pouvoir installer la librairie csv-parser. Pour ce faire, ouvrez votre terminal dans un dossier vite, et entez la commande suivante. Cela va créer un fichier package.json.

Terminal

_10
mkdir csv-to-json # Commande optionnelle pour créer un nouveau dossier vide
_10
cd csv-to-json # Commande optionnelle pour entrer dans le dossier créé
_10
npm init -y

Il faut également modifier le fichier package.json et y copier la ligne "type":"module".

Voici à quoi ressemble un fichier bien configuré :

package.json

_16
{
_16
"name": "csv-to-json",
_16
"version": "1.0.0",
_16
"description": "",
_16
"main": "index.js",
_16
"type": "module",
_16
"scripts": {
_16
"test": "echo \"Error: no test specified\" && exit 1"
_16
},
_16
"keywords": [],
_16
"author": "",
_16
"license": "ISC",
_16
"dependencies": {
_16
"csv-parser": "^3.0.0"
_16
}
_16
}

Nous avons terminé la configuration. Nous pouvons maintenant créer un nouveau fichier index.js qui va contenir le code source permettant de transformer nos données CSV en JSON. Je vous conseille de l'ouvrir avec votre éditeur de code préféré (je recommande d'utiliser VSCode).

Première ligne de code

Pour pouvoir lire notre fichier CSV, il faut d'abord le télécharger ! Je suis allé sur le site Mockaroo pour générer un fichier MOCK_DATA.csv que j'ai glissé-déposé dans le dossier projet.

Nous allons écrire une première fonction afin de détecter la présence du fichier CSV grâce à la librairie native de Node, fs. La fonction readCsvFile affichera hello world dans notre terminal et importera la librairie fs. Nous appelons ensuite la fonction pour l'exécuter.

index.js

_10
import fs from 'fs';
_10
export const readCsvFile = () => {
_10
console.log('hello world');
_10
};
_10
_10
readCsvFile();

Après avoir sauvegardé notre fichier, nous allons exécuter le code avec la commande node index.js. Nous devrions voir le message hello world dans notre terminal. Cela signifie que le projet est bien configuré !

Lecture d'un fichier NodeJS avec fs

Nous pouvons maintenant charger le fichier CSV au sein de notre dossier. Il suffit de modifier notre fonction en rajoutant les instructions suivantes :

index.js

_10
const filePath = './MOCK_DATA.csv';
_10
const fileExists = fs.readFileSync(filePath);
_10
_10
if (!fileExists) {
_10
throw new Error(`Le fichier ${filePath} n'existe pas.`);
_10
}

  • La première instruction spécifie le chemin relatif vers notre fichier CSV, ici ./MOCK_DATA.csv
  • La seconde instruction permet d'ouvrir le fichier avec la méthode fs.readFileSync pour s'assurer que le fichier existe.
  • Si le fichier n'existe pas, nous déclenchons une erreur avec le message Le fichier MOCK_DATA.csv n'existe pas.

Nous sauvegardons notre fichier pour l'exécuter à nouveau avec notre terminal avec la commande node index.js. L'erreur n'a pas été déclenchée, cela signifie que notre fichier a été lu par fs. Nous pouvons maintenant passer à la conversion.

Conversion CSV en JSON avec csv-parser

Nous avons besoin installer la librairie csv-parser pour pouvoir l'utiliser.

Terminal

_10
npm i csv-parser

Une fois installée, nous allons importer la librairie à l'intérieur de notre fichier. Notre fichier contient maintenant ces instructions :

index.js

_13
import fs from 'fs';
_13
import parser from 'csv-parser';
_13
_13
export const readCsvFile = () => {
_13
const filePath = './MOCK_DATA.csv';
_13
const fileExists = fs.readFileSync(filePath);
_13
_13
if (!fileExists) {
_13
throw new Error(`Le fichier ${filePath} n'existe pas.`);
_13
}
_13
};
_13
_13
readCsvFile();

La documentation officielle de csv-parser nous aide avec l'instruction suivante que nous allons rajouter dans notre code :

index.js

_10
fs.createReadStream(filePath)
_10
.pipe(parser())
_10
.on('data', (row) => results.push(row))
_10
.on('end', () => {
_10
console.log(results);
_10
});

Prenons le temps d'analyser ces lignes.

  • Nous appelons d'abord la méthode fs.createReadStream qui accepte en paramètre notre variable filePath (chemin relatif vers le fichier CSV).
  • Nous appelons ensuite la fonction chaînée pipe qui accepte en paramètre une destination (un flux de données, dans notre cas la méthode parser que nous avons précédemment importé.
  • Nous appelons finalement les fonctions chaînées .on qui prennent en premier paramètre un évènement (lire un fichier CSV déclenche plusieurs types d'évènements : error en cas d'erreur, data en cas de lecture de ligne, end à la fin de traitement du fichier).
  • Chaque évènement est suivi d'une fonction de rappel (callback).
  • Notre évènement data va ajouter chaque ligne dans un tableau d'objets nommé results (il ne faut pas oublier de le déclarer au dessus de l'instruction)
  • Notre évènement end qui va afficher sur notre terminal notre tableau de lignes traitées à la fin du traitement.

Code final

Nous rajoutons la commande trouvée sur la documentation de csv-parser, modifiée pour répondre à nos critères.

index.js

_21
import fs from 'fs';
_21
import parser from 'csv-parser';
_21
_21
export const readCsvFile = () => {
_21
const filePath = './MOCK_DATA.csv';
_21
const fileExists = fs.readFileSync(filePath);
_21
_21
if (!fileExists) {
_21
throw new Error(`Le fichier ${filePath} n'existe pas.`);
_21
}
_21
_21
let results = [];
_21
fs.createReadStream(filePath)
_21
.pipe(parser())
_21
.on('data', (row) => results.push(row))
_21
.on('end', () => {
_21
console.log(results);
_21
});
_21
};
_21
_21
readCsvFile();

Nous avons déclaré une nouvelle variable results qui va stocker chaque ligne transformée en JSON.

Nous pouvons sauvegarder notre fichier, et l'exécuter dans notre invité de commande pour vérifier son fonctionnement

Terminal

_10
node index.js

Le terminal affiche un tableau d'objet, correspondant à notre fichier CSV. Chaque clé de notre objet est nommée correspondant au titre (l'en-tête en première ligne) du fichier.

Mon terminal affichant des données CSV converties en JSON

Nous avons réussi la conversion de notre fichier CSV en JSON.

J'espère que ce guide vous a été utile. Merci aux contributeurs du projet qui proposent également d'autres librairies, permettant de manipuler davantage de fichiers CSV.

Articles similaires
Formation NestJS 2024
7 minutes de lecture - 470 vuesNestJSNodeJS

Créer un serveur API avec NestJS : le guide ultime

Découvre comment utiliser NestJS, un puissant framework NodeJS. Il donne une base de code solide pour développer un serveur API en NodeJS. Il inclut générateur de projet pré-configuré, Typescript, Prettier, Eslint et Docker.

Je récupère les données d'une API pour les transformer en fichier CSV
7 minutes de lecture - 207 vuesNodeJS

Transformer des données d'API en CSV avec NodeJS

Les fichiers CSV représentent un format de donnée très courant sur internet. Dans cet article, nous allons lire et convertir les données d'une API JSON vers un fichier CSV téléchargable avec Node.JS

Rejoins la

newsletter