Parsear CSV con NodeJS y csv-parse

Node.JS ha ganado popularidad para programar aplicaciones del lado del servidor utilizando JavaScript. Parsear o leer un archivo CSV (valores separados por coma) es algo requerido muchas veces, por ejemplo, para importar datos o simplemente como medio de comunicación.

Parsear y leer CSV en Node.JS con csv-parse

Parsear y leer CSV en Node.JS con csv-parse

Es por eso que en este artículo explico cómo abrir, leer y parsear un archivo CSV utilizando Node.JS (el lenguaje JavaScript del lado del servidor) y un módulo llamado csv-parse que nos facilitará la tarea.

Requisitos e instalación de librería

Primero hay que instalar NPM y NodeJS (o actualizarlo). Más tarde, se debe ejecutar npm install --save csv-parse. Recuerda que si no se cuenta con un proyecto iniciado, se debe iniciar con npm init.

Por cierto, ya se vio anteriormente cómo parsear un CSV desde PHP.

Sobre la librería

La documentación oficial está aquí.

Ejemplo y explicación de uso de csv-parse con Node.js

Aquí está un ejemplo completo y funcional. Dejo el código, y más abajo lo explicamos. Lo que se hace es abrir un archivo con el módulo fs y pasarlo a través de una tubería al parseador de CSV.

Gracias al poder de GitHub y los gists, se pueden poner todos los archivos necesarios.

Por cierto, si el CSV no se ve bien haz click en view raw. Ahí está también el package.json para que se vean las dependencias. Ahora sí vamos al código.

Lo de abrir el archivo se encarga el módulo fs; de ahí lo importante es cómo se pasa al parseador a través de pipe. Como vemos, pasamos algunas opciones que ya tienen valores por defecto pero que es son importantes de mencionar.

  1. El delimitador, que por defecto es la coma pero podría ser cualquier carácter dependiendo del CSV.
  2. La opción para castear; ya que al leer se ponen todos los valores como cadena, incluso si son números. Con la opción puesta en true, se intenta parsear a los tipos nativos.
  3. El carácter que indica que las líneas que comienzan con él son un comentario. Lo puse sólo como ejemplo con el carácter de #.

Más abajo se escucha al evento readable, y se obtiene la fila. La fila es una línea del CSV y a su vez un arreglo. El arreglo, en cada índice, tiene una columna. Para este caso que es un archivo de productos, el nombre de los mismos está en fila[0].

Por otro lado, si se desea llevar un índice de la fila se podría poner un contador global y aumentarlo en cada llamada al evento.

Al finalizar la lectura con fs, se termina también al parseador llamando al método end.

Descargar y ejecutar código

Puedes descargar el código del index.js con el package.json (también debes descargar el de productos.csv). Una vez que tengas instalado NPM ejecuta npm install y luego node index.js; lo que ejecutará el archivo e imprimirá los resultados.

Probar ejemplo online

Si no quieres complicarte, puedes ejecutar el ejemplo aquí, sin salir del navegador.

Conclusiones

Tal vez parezca un ejemplo simple, pero no lo es. Lo hice de manera sencilla para que lo puedas aplicar fácilmente en lo que sea que estés haciendo. Además, esto de leer con streams y esas cosas hace que se pueda trabajar con archivos grandes sin sacrificar el rendimiento.