- Formatos “superiores” para substituir o CSV são apresentados com frequência, mas a maioria ignora os verdadeiros pontos fortes do CSV com base em comparações tendenciosas
- Este texto não diz que o CSV é perfeito, mas busca destacar vantagens subestimadas
- Em contraste com o clima em que odiar CSV parece algo “cool”, ele relembra o verdadeiro valor do CSV
1. CSV é extremamente simples
- A definição de CSV está no próprio nome: “valores separados por vírgula”
- As linhas são separadas por quebras de linha, e as colunas por vírgulas
- Quando um valor contém vírgula ou quebra de linha, ele é colocado entre aspas, e as próprias aspas são representadas com aspas duplas
- Sem uma especificação complexa, qualquer pessoa pode entender e usar de forma intuitiva
- Ainda assim, para um parsing correto, continua sendo necessário usar um parser de CSV dedicado
2. CSV é uma ideia coletiva
- Não tem proprietário, não foi privatizado
- O RFC 4180 existe, mas a maioria o trata apenas como referência
- É um formato livre, baseado em regras comuns compartilhadas implicitamente por desenvolvedores do mundo todo
3. CSV é texto
- Assim como JSON, YAML e XML, é um formato de texto puro legível por humanos
- Pode ser aberto em qualquer editor de texto, e o conteúdo pode ser verificado sem ferramentas adicionais
- O esquema de codificação também pode ser escolhido livremente
4. CSV é otimizado para streaming
- Como sua estrutura é lida linha por linha, o consumo de memória é muito baixo
- Mesmo com código simples, é possível processar vários gigabytes de dados usando apenas alguns KB de memória
- Formatos colunares como Parquet são difíceis de processar em streaming e exigem buffering complexo
- A desvantagem é que, mesmo quando se quer ver apenas uma coluna específica, é preciso ler a linha inteira
5. CSV é fácil de anexar
- É muito fácil abrir um arquivo em modo append (
a+) e adicionar novas linhas ao final
- Já formatos colunares como Parquet tornam a adição de linhas ineficiente e complexa
6. CSV oferece suporte a tipagem dinâmica
- Como não há tipos fixos, é possível interpretar os dados com flexibilidade
- Exemplo: JavaScript não consegue representar corretamente inteiros de 64 bits, mas o CSV pode ser usado sem essa limitação
- Isso traz vantagens em compatibilidade entre linguagens e flexibilidade
- Mas, se for interpretado incorretamente, pode gerar erros → é preciso cuidado ao usar
- Quando é necessário alto desempenho, também é possível processar diretamente em nível binário, sem decodificar o texto
7. CSV é conciso
- Como o cabeçalho existe apenas no início do arquivo, quase não há repetição estrutural
- JSON e XML têm muito overhead por causa da repetição de chaves
- A representação de strings já é concisa, e o overhead do próprio formato (vírgulas, aspas etc.) é muito pequeno
8. Até um CSV invertido continua válido
- Mesmo invertido em nível de bytes, um CSV ainda é um CSV válido
- Isso é possível graças à forma de escape com aspas duplas, que funciona como um esquema de escape palindrômico
- Essa característica permite ler o final de um arquivo CSV com muita eficiência
- Exemplo: ao retomar um processo interrompido, é possível reiniciar lendo apenas as últimas linhas do arquivo
9. O Excel odeia CSV
- Se o Excel considera um formato inconveniente, talvez isso seja até um sinal de que você está no caminho certo
3 comentários
O simples é o melhor!
Pior é melhor!
Opiniões no Hacker News
O motivo de gostar de arquivos CSV e INI é que eles são simples, baseados em texto, não têm tipos codificados no formato e são compostos apenas por strings
CSV é elegante, mas tem uma falha fatal: as aspas têm um efeito "não local"
A melhor coisa do CSV é que qualquer pessoa consegue escrever um parser em 30 minutos
Quem gosta de CSV provavelmente nunca recebeu, em um ambiente corporativo, a tarefa de lidar com prevenção de injeção em CSV
Existem vários motivos para gostar de CSV
Recentemente estou desenvolvendo uma solução baseada em Raspberry Pi
O lado sem graça do CSV é que parsers e serializadores escritos às pressas repetem erros comuns de lidar mal com aspas
csvSe isto fosse realmente uma carta de amor, teria sido escrita em formato CSV
A contestação ao JSON não é muito convincente
Como alguém que gosta de formatos modernos, quando há dúvida uso CSV ou JSONL
grepe fazer streaming