Travailler avec CSV dans Node.js : bibliothèques csv-parser et csv-writer
CSV (Comma-Separated Values) est l'un des formats les plus populaires pour stocker et échanger des données tabulaires. Dans l'écosystème Node.js, il existe de nombreux outils pour travailler avec ce format. Dans cet article, nous examinerons deux bibliothèques particulièrement pratiques et légères : csv-parser pour la lecture et csv-writer pour l'écriture de fichiers CSV.
Installation des bibliothèques
Pour commencer, installez les deux bibliothèques via npm :
npm install csv-parser csv-writerLecture de fichiers CSV avec csv-parser
La bibliothèque csv-parser transforme les données CSV en un flux d'objets JavaScript. Elle fonctionne sur la base des Node.js Streams, ce qui permet de traiter efficacement même de très gros fichiers sans les charger entièrement en mémoire.
Exemple de lecture de base
Créons un fichier users.csv avec le contenu suivant :
name,age,cityAnna,28,ParisJean,35,LyonMarie,22,MarseilleLisons-le maintenant avec csv-parser :
const fs = require('fs');const csv = require('csv-parser');
const results = [];
fs.createReadStream('users.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log('Enregistrements lus :', results.length); console.log('Premier enregistrement :', results[0]); // Sortie : { name: 'Anna', age: '28', city: 'Paris' } });Configuration du séparateur et des en-têtes
csv-parser prend en charge divers réglages. Par exemple, si votre CSV utilise le point-virgule comme séparateur :
fs.createReadStream('users.csv') .pipe(csv({ separator: ';' })) .on('data', (row) => console.log(row));Si le fichier n'a pas d'en-têtes, vous pouvez les spécifier manuellement :
fs.createReadStream('data.csv') .pipe(csv({ headers: ['id', 'product', 'price'] })) .on('data', (row) => console.log(row));Écriture de fichiers CSV avec csv-writer
La bibliothèque csv-writer permet de créer des fichiers CSV à partir de tableaux d'objets. Elle prend en charge différents encodages et séparateurs.
Création d'un fichier CSV simple
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output.csv', header: [ { id: 'name', title: 'Nom' }, { id: 'age', title: 'Âge' }, { id: 'city', title: 'Ville' } ]});
const records = [ { name: 'Anna', age: 28, city: 'Paris' }, { name: 'Jean', age: 35, city: 'Lyon' }, { name: 'Marie', age: 22, city: 'Marseille' }];
csvWriter.writeRecords(records) .then(() => console.log('Fichier CSV créé avec succès'));Réglages supplémentaires de csv-writer
Vous pouvez modifier le séparateur de champs, ajouter un BOM pour un affichage correct du cyrillique dans Excel et spécifier l'encodage :
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output_utf8.csv', header: [ { id: 'name', title: 'Nom' }, { id: 'age', title: 'Âge' } ], fieldDelimiter: ';', alwaysQuote: true, encoding: 'utf8'});Exemple pratique : conversion JSON en CSV
Il est fréquent de devoir convertir des données JSON au format CSV. Voici un exemple complet :
const fs = require('fs');const createCsvWriter = require('csv-writer').createObjectCsvWriter;
// Données sourcesconst jsonData = [ { id: 1, product: 'Ordinateur portable', price: 75000, quantity: 10 }, { id: 2, product: 'Souris', price: 1500, quantity: 50 }, { id: 3, product: 'Clavier', price: 3500, quantity: 30 }];
// Configuration du rédacteur CSVconst csvWriter = createCsvWriter({ path: 'products.csv', header: [ { id: 'id', title: 'ID' }, { id: 'product