Trabalhando com CSV em JavaScript (Node.js): bibliotecas, parsing e geração de dados

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com CSV em JavaScript (Node.js): guia completo



CSV (Comma-Separated Values) — um dos formatos mais populares para troca de dados tabulares. No ecossistema Node.js, existem várias bibliotecas poderosas para parsing, geração e processamento de arquivos CSV. Neste artigo, abordaremos as principais ferramentas, sua instalação, exemplos de uso e melhores práticas.



Bibliotecas populares para trabalhar com CSV em Node.js



Em JavaScript (Node.js), três bibliotecas são mais frequentemente usadas para trabalhar com CSV:



  • csv-parser — parser rápido em streaming, operando em modo streaming
  • csv-stringify — gerador de CSV a partir de objetos ou arrays JavaScript
  • fast-csv — biblioteca universal que combina parsing e geração


Instalação das bibliotecas



Para instalar os pacotes necessários, use npm:



npm install csv-parser csv-stringify fast-csv


Parsing de CSV com csv-parser



A biblioteca csv-parser opera em modo streaming, permitindo processar arquivos de qualquer tamanho sem carregá-los completamente na memória.



Exemplo: leitura de arquivo 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('Arquivo CSV processado com sucesso'); console.log('Primeira linha:', results[0]); });


Por padrão, csv-parser usa a primeira linha do arquivo como cabeçalhos e retorna objetos com as chaves correspondentes.



Geração de CSV com csv-stringify



A biblioteca csv-stringify permite criar strings CSV a partir de arrays ou objetos JavaScript.



Exemplo: criação de CSV a partir de objetos



const { stringify } = require('csv-stringify');const fs = require('fs');

const data = [ { name: 'Ivan', age: 25, city: 'Moscou' }, { name: 'Maria', age: 30, city: 'São Petersburgo' }, { name: 'Alexei', age: 28, city: 'Kazan' }];

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();


Solução universal: fast-csv



fast-csv oferece tanto parsing quanto geração de CSV, além de suportar diversos formatos (TSV, delimitadores personalizados).



Exemplo: parsing de CSV com 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(`Processadas ${rowCount} linhas`); console.log('Dados:', rows); });


Exemplo: escrita de CSV com fast-csv



const fs = require('fs');const csv = require('@fast-csv/format');

const data = [ ['Nome', 'Idade', 'Cidade'], ['Ivan', '25', 'Moscou'], ['Maria', '30', 'São Petersburgo']];

const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);


Trabalhando com arquivos grandes e desempenho



Ao trabalhar com arquivos CSV maiores que 100 MB, recomenda-se o uso de processamento em streaming. Todas as três bibliotecas abordadas suportam streams.



Exemplo: processamento de CSV grande linha por linha



const fs = require('fs');const csv = require('csv-parser');

let rowCount = 0;

fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC

Recommendations