Travailler avec CSV en JavaScript (Node.js) : guide complet
CSV (Comma-Separated Values) est l'un des formats les plus populaires pour l'échange de données tabulaires. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes pour le parsing, la génération et le traitement de fichiers CSV. Dans cet article, nous examinerons les principaux outils, leur installation, des exemples d'utilisation et les meilleures pratiques.
Bibliothèques populaires pour travailler avec CSV en Node.js
En JavaScript (Node.js), trois bibliothèques sont le plus souvent utilisées pour travailler avec CSV :
- csv-parser — un parseur stream rapide fonctionnant en mode streaming
- csv-stringify — un générateur de CSV à partir d'objets ou de tableaux JavaScript
- fast-csv — une bibliothèque universelle combinant parsing et génération
Installation des bibliothèques
Pour installer les paquets nécessaires, utilisez npm :
npm install csv-parser csv-stringify fast-csvParsing CSV avec csv-parser
La bibliothèque csv-parser fonctionne en mode stream, ce qui permet de traiter des fichiers de toute taille sans les charger entièrement en mémoire.
Exemple : lecture d'un fichier CSV
const fs = require('fs');const csv = require('csv-parser');
const results = [];
fs.createReadStream('data.csv') .pipe(csv()) .on('data', (row) => { results.push(row); }) .on('end', () => { console.log('Fichier CSV traité avec succès'); console.log('Première ligne :', results[0]); });Par défaut, csv-parser utilise la première ligne du fichier comme en-têtes et retourne des objets avec les clés correspondantes.
Génération CSV avec csv-stringify
La bibliothèque csv-stringify permet de créer des chaînes CSV à partir de tableaux ou d'objets JavaScript.
Exemple : création de CSV à partir d'objets
const { stringify } = require('csv-stringify');const fs = require('fs');
const data = [ { name: 'Иван', age: 25, city: 'Москва' }, { name: 'Мария', age: 30, city: 'Санкт-Петербург' }, { name: 'Алексей', age: 28, city: 'Казань' }];
const writableStream = fs.createWriteStream('output.csv');
const stringifier = stringify({ header: true, columns: ['name', 'age', 'city']});
stringifier.pipe(writableStream);data.forEach(row => stringifier.write(row));stringifier.end();Solution universelle : fast-csv
fast-csv fournit à la fois le parsing et la génération de CSV, et prend en charge différents formats (TSV, séparateurs personnalisés).
Exemple : parsing CSV avec fast-csv
const fs = require('fs');const csv = require('@fast-csv/parse');
const rows = [];
fs.createReadStream('data.csv') .pipe(csv.parse({ headers: true })) .on('error', error => console.error(error)) .on('data', row => rows.push(row)) .on('end', (rowCount) => { console.log(`${rowCount} lignes traitées`); console.log('Données :', rows); });Exemple : écriture CSV avec fast-csv
const fs = require('fs');const csv = require('@fast-csv/format');
const data = [ ['Имя', 'Возраст', 'Город'], ['Иван', '25', 'Москва'], ['Мария', '30', 'Санкт-Петербург']];
const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);Traitement des gros fichiers et performance
Lorsque vous travaillez avec des fichiers CSV de plus de 100 Mo, il est recommandé d'utiliser un traitement en flux. Les trois bibliothèques examinées prennent en charge les streams.
Exemple : traitement d'un gros CSV ligne par ligne
const fs = require('fs');const csv = require('csv-parser');
let rowCount = 0;
fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC Aussi dans la bibliothèque
Métriques Prometheus en Kotlin : intégration avec Micrometer et Ktor
Travailler avec CSV en PHP : lecture, écriture et traitement des données
Rate Limiting en Go (Golang) : bibliothèques, modèles et exemples de mise en œuvre
Mise en cache en TypeScript : Redis, node-cache et autres outils