Trabajo con CSV en JavaScript (Node.js): bibliotecas, análisis y generación de datos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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-csv


Aná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

Recommendations