Cómo leer archivos CSV en Node.js

Lee archivos CSV en JavaScript desde el lado del servidor con la librería csv-parse.

leer-archivo-csv-node-js

CSV (Comma-Separated Values o valores separados por coma en español) es un tipo de archivo de texto habitual para guardar información en forma tabular. La coma sirve para delimitar valores en celdas de tabla y una nueva línea define cuándo empieza y termina una fila.

Para un formato tan simple, es posible usar cualquier lenguaje de programación. En este caso, lo haremos con JavaScript (Node.js) del lado del servidor. Y digo “simple” porque podríamos obtener los datos de forma tan sencilla como:

const contents = `nombre,edad,ciudad\nMichael,25,New York\nAndrea,30,Munich`;
const lines = contents.split('\n');
const data = lines.map(line => line.split(','));
console.log(data);

Sin embargo, el problema viene cuando queremos tratar con archivos de gran tamaño. Para manipular los datos de forma eficiente, te propongo usar la librería csv-parse.

Creación de un proyecto de ejemplo

Crear directorio del proyecto y moverse a él

Terminal
mkdir mi-proyecto-csv
cd mi-proyecto-csv

Inicializar un proyecto Node.js

Terminal
npm init -y

Instalar la librería csv-parse

Terminal
npm install csv-parse

Uso de csv-parse para manipular datos de un archivo CSV

Supongamos que tenemos un archivo datos.csv con el siguiente contenido:

nombre,edad,ciudad
Michael,25,New York
Andrea,30,Munich
Charles,28,Moscow

Creamos un script en Node.js para leerlo y procesarlo:

import fs from 'fs'
import { parse } from 'csv-parse'
fs.createReadStream('datos.csv')
.pipe(parse({ columns: true, delimiter: ',', from_line: 2 }))
.on('data', (row) => {
console.log(`Nombre: ${row.nombre}, Edad: ${row.edad}, Ciudad: ${row.ciudad}`);
})
.on('end', () => {
console.log('Archivo CSV procesado correctamente.');
})
.on('error', (err) => {
console.error('Error al leer el archivo:', err);
});

Explicación del código

  • fs.createReadStream('datos.csv'): Abre el archivo CSV para lectura en streaming.
  • .pipe(parse({ columns: true, delimiter: ',', from_line: 2 })): Usa csv-parse para procesar el archivo con cabeceras.
  • .on('data', (row) => {...}): Escucha cada fila parseada y la imprime en consola.
  • .on('end', () => {...}): Se ejecuta cuando termina la lectura del archivo.
  • .on('error', (err) => {...}): Gestiona posibles errores en la lectura.

Conclusión

Parsear archivos CSV en Node.js es sencillo con la librería csv-parse, que permite manejar datos estructurados de manera eficiente, incluso en archivos grandes. Con esta librería, podemos leer archivos CSV en streaming sin necesidad de cargar todo el contenido en memoria.

Para más información sobre la librería, consulta la documentación oficial.