Introducción
Contenido
El término CSV es una abreviatura que significa valores separados por comas.
Un archivo CSV es un archivo de texto sin formato que contiene datos formateados según el estándar CSV. Tiene líneas distintas que representan registros y cada campo del registro está separado de otro por una coma.
Es muy conveniente almacenar datos tabulares en CSV:
Te puede interesar:Git: Checkout a Remote BranchName,Surname,Age,Gender
John,Snow,26,M
Clair,White,33,F
Fancy,Brown,78,F
Aquí, la primera fila representa los títulos de las columnas / campos de nuestros registros CSV y luego hay 3 registros que representan a ciertas personas. Como puede ver, los valores están delimitados por comas y cada registro comienza en una nueva fila.
Oye, pero ¿qué pasa si queremos incluir comas o saltos de línea en algunos de los campos que están almacenados en formato CSV?
Hay varios enfoques para resolver este problema, por ejemplo, podríamos envolver dichos valores entre comillas dobles. Sin embargo, algunas de las implementaciones de CVS no admiten esta función por diseño.
Estandarización CSV
Uno de los estándares CSV más utilizados se describe en el RFC4180.
Te puede interesar:Demostración matemática de la corrección y eficiencia del algoritmoSegún él, el formato CSV se describe mediante estas 7 reglas:
- Cada registro está ubicado en una línea separada, delimitada por un salto de línea (CRLF).
- El último registro del archivo puede tener o no un salto de línea final.
- Puede haber una línea de encabezado opcional que aparece como la primera línea del archivo con el mismo formato que las líneas de registro normales. Este encabezado contendrá los nombres correspondientes a los campos del archivo y debe contener el mismo número de campos que los registros del resto del archivo (la presencia o ausencia de la línea del encabezado debe indicarse mediante el parámetro opcional «encabezado» de este Tipo de Mimica).
- Dentro del encabezado y de cada registro, puede haber uno o más campos, separados por comas. Cada línea debe contener el mismo número de campos en todo el archivo. Los espacios se consideran parte de un campo y no deben ignorarse. El último campo del registro no debe ir seguido de una coma.
- Cada campo puede estar entre comillas dobles o no (sin embargo, algunos programas, como Microsoft Excel, no utilizan comillas dobles). Si los campos no están entre comillas dobles, es posible que las comillas dobles no aparezcan dentro de los campos.
- Los campos que contienen saltos de línea (CRLF), comillas dobles y comas deben incluirse entre comillas dobles.
- Si se utilizan comillas dobles para encerrar campos, entonces una comilla doble que aparece dentro de un campo debe escaparse precediéndola con otra comilla doble.
Si está interesado en leer más con varios ejemplos, puede estudiar el documento RFC4180 original, vinculado anteriormente.
Leer archivos CSV en Node.js
Para leer un archivo CSV en Node.js, no podríamos usar nada más que solo el fs
módulo, ya que en esencia el archivo CSV es un archivo de texto sin formato.
Si está interesado en leer más sobre la lectura de archivos con Node.js o la escritura de archivos con Node.js, ¡tenemos ambos cubiertos!
Te puede interesar:Git: eliminar sucursales de forma local y remotaSin embargo, hay un par de módulos útiles que podrían manejar la generación o el análisis del contenido CSV por nosotros. Empezaremos instalando el módulo csv-parser
:
$ npm i -s csv-parser
Luego, coloquemos los datos CSV desde el principio del artículo en un archivo llamado «data.csv» y sigamos con un ejemplo muy simple:
const csv = require('csv-parser');
const fs = require('fs');
fs.createReadStream('data.csv')
.pipe(csv())
.on('data', (row) => {
console.log(row);
})
.on('end', () => {
console.log('CSV file successfully processed');
});
Aquí, creamos un readStream
utilizando la fs
módulo, póngalo en el csv
objeto que luego disparará el data
evento cada vez que se procesa una nueva fila del archivo CSV. los end
El evento se activa cuando se procesan todas las filas del archivo CSV y registramos un mensaje corto en la consola para indicarlo.
Para fines de demostración, solo console.log
cada fila procesada y después de ejecutar el código, verá este resultado en su consola:
Row {
Name: 'John',
'Surname': 'Snow',
'Age': '26',
'Gender': 'M' }
Row {
Name: 'Clair',
'Surname': 'White',
'Age': '33',
'Gender': 'F' }
Row {
Name: 'Fancy',
'Surname': 'Brown',
'Age': '78',
'Gender': 'F' }
CSV file successfully processed
Escribir archivos CSV en Node.js
Recordando el hecho de que los archivos CSV son solo archivos de texto sin formato, siempre podemos limitarnos a usar solo los archivos nativos fs
módulo, pero para hacernos la vida más fácil, usaremos otro módulo común npm
módulo, csv-writer
.
Primero va la instalación:
$ npm i -s csv-writer
Luego, el código:
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({
path: 'out.csv',
header: [
{id: 'name', title: 'Name'},
{id: 'surname', title: 'Surname'},
{id: 'age', title: 'Age'},
{id: 'gender', title: 'Gender'},
]
});
const data = [
{
name: 'John',
surname: 'Snow',
age: 26,
gender: 'M'
}, {
name: 'Clair',
surname: 'White',
age: 33,
gender: 'F',
}, {
name: 'Fancy',
surname: 'Brown',
age: 78,
gender: 'F'
}
];
csvWriter
.writeRecords(data)
.then(()=> console.log('The CSV file was written successfully'));
los csv-writer
El módulo requiere una configuración inicial donde le proporcionamos el nombre del archivo CSV resultante y el header
configuración.
Nota: En nuestro objeto JavaScript, todas las propiedades están en minúsculas, pero en el archivo CSV las primeras letras de ellas deben estar en mayúscula.
Una vez finalizada la configuración, todo lo que tenemos que hacer es llamar al writeRecords
función, pase en el data
matriz que representa la estructura de datos que se debe escribir en el archivo CSV.
Una vez finalizado este proceso, imprimiremos un mensaje informativo en la consola indicando que el programa se ha completado.
Usando el módulo fast-csv
El ecosistema de Node.js y npm
proporciona muchas opciones para leer y escribir archivos CSV. Mostraremos otro ejemplo de un módulo CSV popular y veremos cómo podemos escribir nuestra matriz de datos usando el fast-csv
módulo como alternativa.
Primero, tenemos que instalar el módulo:
$ npm i -s fast-csv
const fastcsv = require('fast-csv');
const fs = require('fs');
const ws = fs.createWriteStream("out.csv");
fastcsv
.write(data, { headers: true })
.pipe(ws);
La API es un poco diferente, pero el resultado es idéntico. En solo un par de líneas de código, logramos escribir la matriz de objetos JavaScript en un archivo CSV que luego podría ser utilizado por una variedad de otras aplicaciones.
Conclusión
Leer y escribir archivos CSV con Node.js es una tarea de desarrollo común, ya que el formato CSV se usa comúnmente para almacenar datos tabulares estructurados. Muchos npm
Los módulos proporcionan esta funcionalidad, por lo que debe elegir el que mejor se adapte a sus necesidades y tenga soporte continuo.