Como ler arquivos CSV com Node.js
CSV já é um dos formatos de dados mais simples, mas o Node.js torna ainda mais fácil trabalhar com ele.
Os arquivos CSV são um formato de armazenamento de dados conveniente e você pode usá-los em seus projetos Node.js para lidar com qualquer coisa, desde configuração até dados brutos. Eles podem simplificar o compartilhamento de informações entre dois aplicativos, mesmo que estejam escritos em idiomas diferentes.
No Node.js, você pode usar vários métodos para ler e gravar arquivos CSV.
Este tutorial mostra como usar o módulo fs e o pacote NPM fast-csv para ler e gravar arquivos CSV.
Configuração do projeto
Para acompanhar este tutorial, certifique-se de ter o Node.js instalado em sua máquina. Execute este comando para verificar:
node -v
Deve retornar um número de versão. Se você não possui o Node.js instalado, siga as instruções neste tutorial de instalação para fazer isso.
No diretório de sua preferência, crie uma nova pasta chamada parse-csv.
mkdir parse-csv
Navegue até parse-csv e crie um novo arquivo. Nomeie-o como parseCSV.js.
cd parse-csv
touch parseCSV.js
Agora você pode começar a trabalhar com CSV.
Usando o módulo fs
O módulo fs (abreviação de sistema de arquivos) contém vários comandos para interagir com o sistema de arquivos em Node.js.
Leia o arquivo inteiro de uma vez
Os comandos readFile() e readFileSync() do módulo fs permitem que você leia o conteúdo do arquivo em Node.js. A diferença entre esses comandos é que readFileSync() é síncrono - ele bloqueia a execução de outro JavaScript - enquanto readFile() é assíncrono ou sem bloqueio.
Como a leitura de arquivos CSV pode demorar um pouco, especialmente para arquivos grandes, geralmente é melhor usar o comando sem bloqueio, readFile(), conforme mostrado abaixo.
const fs = require('fs');
fs.readFile('csvdemo.csv', 'utf8', function (err, data) {
/* parse data */
});
Se você não tiver um arquivo CSV de amostra, poderá gerar um no mockaroo. Você também pode aprender como criar um arquivo CSV sozinho.
Leia linha por linha
Embora readFile() funcione, ele consome muita memória, pois lê todo o arquivo CSV de uma só vez. Isso é um problema, especialmente ao trabalhar com arquivos CSV grandes. Uma alternativa é ler uma linha por vez usando o comando fs.createReadStream().
const fs = require("fs");
const readline = require("readline");
const stream = fs.createReadStream("./csvdemo.csv");
const rl = readline.createInterface({ input: stream });
let data = [];
rl.on("line", (row) => {
data.push(row.split(","));
});
rl.on("close", () => {
console.log(data);
});
Aqui, você está passando o nome do arquivo CSV para fs.createReadStream() para criar um fluxo legível. Os fluxos permitem trabalhar com grandes quantidades de dados, permitindo acessá-los em partes.
Depois de criar o fluxo legível, passe-o para o método readline.createInterface(). O módulo readline fornece uma interface para ler os dados, uma linha por vez. Agora você pode enviar cada linha para a matriz de dados enquanto ela é lida.
Observe, entretanto, que esse código simplesmente divide cada linha entre vírgulas. Embora funcione com o arquivo CSV mais básico, o formato é na verdade mais complicado do que o nome indica. Analisar arquivos CSV manualmente não é uma abordagem robusta, especialmente se você não estiver no controle dos dados. Na maioria das situações, você deve usar uma biblioteca CSV.
Usando csv rápido
Para analisar arquivos CSV de maneira confiável, você pode usar uma biblioteca como fast-csv, que está disponível como um pacote npm. Torna mais fácil não apenas ler arquivos CSV, mas também formatá-los.
Para começar, inicialize o npm e instale o fast-csv.
npm init -y
npm i fast-csv
Leia arquivos CSV usando fast-csv da seguinte maneira.
const fs = require('fs')
const csv = require('fast-csv');
const data = []
fs.createReadStream('./csvdemo.csv')
.pipe(csv.parse({ headers: true }))
.on('error', error => console.error(error))
.on('data', row => data.push(row))
.on('end', () => console.log(data));
No código acima, comece criando um fluxo legível a partir do arquivo CSV e conecte-o ao método de análise do CSV rápido usando pipe(). Observe que você está passando a opção de cabeçalhos para csv.parse(). Isso pula a primeira linha. Defina os cabeçalhos como false se a primeira linha do seu arquivo CSV não contiver cabeçalhos.
À medida que o arquivo CSV é lido uma linha por vez, você envia cada linha para a matriz de dados. Após a leitura de todo o arquivo, você pode manipular o conteúdo da matriz de dados como desejar.
Há mais de uma maneira de analisar um CSV
Os arquivos CSV são úteis para armazenar grandes conjuntos de dados porque são fáceis de analisá-los. No Node.js, você pode usar o módulo fs integrado ou pacotes NPM.
Usar uma biblioteca como fast-csv é muito mais fácil e robusto do que escrever seu próprio código de análise manualmente. Alguns outros pacotes para análise de CSV são csv-parser e papa parser.