Trabajo con CSV en JavaScript (Node.js): guía completa
CSV (Valores Separados por Comas) es uno de los formatos más populares para el intercambio de datos tabulares. En el ecosistema de Node.js existen varias bibliotecas potentes para el análisis, generación y procesamiento de archivos CSV. En este artículo, revisaremos las herramientas principales, su instalación, ejemplos de uso y mejores prácticas.
Bibliotecas populares para trabajar con CSV en Node.js
En JavaScript (Node.js), para trabajar con CSV se utilizan principalmente tres bibliotecas:
- csv-parser — un analizador rápido en modo streaming
- csv-stringify — un generador de CSV a partir de objetos o arrays de JavaScript
- fast-csv — una biblioteca universal que combina análisis y generación
Instalación de las bibliotecas
Para instalar los paquetes necesarios, use npm:
npm install csv-parser csv-stringify fast-csvAnálisis de CSV con csv-parser
La biblioteca csv-parser funciona en modo streaming, lo que permite procesar archivos de cualquier tamaño sin cargarlos completamente en memoria.
Ejemplo: lectura de un archivo 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('Archivo CSV procesado exitosamente'); console.log('Primera fila:', results[0]); });Por defecto, csv-parser usa la primera línea del archivo como encabezados y devuelve objetos con las claves correspondientes.
Generación de CSV con csv-stringify
La biblioteca csv-stringify permite crear cadenas CSV a partir de arrays u objetos de JavaScript.
Ejemplo: creación de CSV a partir de objetos
const { stringify } = require('csv-stringify');const fs = require('fs');
const data = [ { name: 'Iván', age: 25, city: 'Moscú' }, { name: 'María', age: 30, city: 'San Petersburgo' }, { name: 'Alexéi', age: 28, city: 'Kazán' }];
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();Solución universal: fast-csv
fast-csv proporciona tanto análisis como generación de CSV, y también admite varios formatos (TSV, delimitadores personalizados).
Ejemplo: análisis de CSV con 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(`Procesadas ${rowCount} filas`); console.log('Datos:', rows); });Ejemplo: escritura de CSV con fast-csv
const fs = require('fs');const csv = require('@fast-csv/format');
const data = [ ['Nombre', 'Edad', 'Ciudad'], ['Iván', '25', 'Moscú'], ['María', '30', 'San Petersburgo']];
const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);Trabajo con archivos grandes y rendimiento
Al trabajar con archivos CSV de más de 100 MB, se recomienda usar procesamiento en streaming. Las tres bibliotecas analizadas admiten streams.
Ejemplo: procesamiento de un CSV grande línea por línea
const fs = require('fs');const csv = require('csv-parser');
let rowCount = 0;
fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC También en la biblioteca
Generación de PDF en PHP: mejores bibliotecas y ejemplos de código
Generación de informes PDF en Swift para iOS y macOS con PDFKit y Core Graphics
Detekt para Kotlin: guía completa con ejemplos prácticos