Diff de CSV: compare dois arquivos CSV online
Cole ou carregue dois arquivos CSV e veja as linhas, preços e campos alterados lado a lado. Roda no seu navegador, sem cadastro, sem upload.
O que é a ferramenta de diff de CSV?
Uma ferramenta gratuita, no navegador, para comparar dois arquivos CSV. Cole o export do fornecedor de ontem à esquerda, o de hoje à direita, e as células alteradas se acendem. Nada sai da sua máquina. Não há conta, upload nem cota.
O diff em si é em nível de caractere, com uma passagem de pós-processamento semântica que junta os destaques no valor inteiro do campo em vez de espalhá-los entre as vírgulas. A gramática que esta ferramenta assume é a especificação CSV de fato, RFC 4180: campos separados por vírgula, aspas duplas opcionais, aspas duplicadas para escapar uma aspa literal, finais de linha CRLF.
Se você já abriu duas listas de preços de fornecedor com 8.000 linhas no Excel, rolou coluna por coluna tentando achar o SKU cujo preço mudou e desistiu, esta é a ferramenta que te leva à mudança em segundos. Para prosa livre, use nossa ferramenta de diff de texto. Para dados estruturados com chaves estáveis, o diff de JSON lida com a reordenação de objetos muito melhor do que o CSV consegue. O diff de XML é a escolha certa para exports legados de ERPs antigos.
Como o diff funciona de verdade
A comparação é linha a linha, ciente dos caracteres. Inserções aparecem em verde à direita, remoções em vermelho à esquerda. A passagem em modo linha mantém o desempenho razoável em arquivos de 5 MB, e depois um refinamento em modo caractere sobre as linhas alteradas mostra o campo exato que se moveu. Para a maioria dos exports de planilha, isso é mais rápido e limpo do que rodar diff num terminal.
Vamos ser honestos sobre o que isso não é. É um diff de texto, não uma comparação realmente ciente das chaves de linha. Se você reordenar as linhas ordenando por outra coluna, cada linha vai parecer alterada mesmo que os dados sejam idênticos. Se reordenar colunas, mesma coisa. Não há noção de chave primária aqui, do jeito que o csvjoin do csvkit ou um merge do pandas em um SKU dariam. Ordene os dois arquivos do mesmo jeito antes de colar, ou use uma dessas ferramentas quando você realmente precisar de comparação baseada em conjuntos.
A linha de cabeçalho é dado para esta ferramenta. A linha 1 é tratada igual a todas as outras, o que significa que renomear um cabeçalho aparece como um diff de uma linha no topo. Geralmente é o que você quer ao revisar deriva de esquema. Se só interessam as linhas do corpo, tire o cabeçalho dos dois lados antes de colar. O próprio formato CSV, incluindo as convenções de cabeçalho, está descrito no artigo de fundo sobre CSV e na RFC 7111, que define fragmentos de URI para selecionar intervalos de células dentro de um recurso CSV.
Como comparar arquivos CSV em três passos
Dois painéis de texto, um diff. Sem cadastro, sem upload, sem ida e volta ao servidor.
- 1
Cole ou carregue seu CSV
Cole o CSV mais antigo à esquerda e o mais novo à direita. Ou clique em Carregar em qualquer um dos lados para carregar um arquivo .csv, .tsv ou .txt direto do disco. O botão Exemplo preenche os dois painéis com uma pequena lista de preços de produtos para você ver a ferramenta em ação primeiro.
- 2
Normalize os finais de linha se precisar
O Excel salva CSV com CRLF (\r\n) no Windows; ferramentas como o csv.writer do Python ou um pipeline shell Unix em geral escrevem LF (\n). Se um lado é CRLF e o outro LF, cada linha vai parecer alterada. Abra os dois no mesmo editor (ou passe pelo dos2unix) antes de colar para que os finais batam. O BOM UTF-8 no início de um CSV salvo pelo Excel é o outro vilão clássico; tire-o se o outro arquivo não tem.
- 3
Leia o diff
Remoções aparecem com destaque vermelho à esquerda, inserções com destaque verde à direita. Role qualquer dos lados e o outro acompanha. Procure preços alterados, novas linhas adicionadas no fim e endereços de e-mail corrigidos no meio da lista. Mudanças de cabeçalho aparecem como um diff de uma linha na linha 1.
Quando o diff de CSV é a ferramenta certa
Reconciliar um CSV de inventário do fornecedor com seu último export
Um fornecedor manda uma nova lista de preços toda semana. Jogue o arquivo da semana passada no painel esquerdo, o desta semana no direito, e os movimentos de preço por SKU saltam à vista sem você precisar rolar 4.000 linhas no Excel caçando qual célula ficou amarela. Fazer isso no Excel com VLOOKUP contra uma segunda planilha dá certo, mas é lento; o diff é mais rápido quando você só precisa de uma checagem rápida antes de empurrar os preços novos para a loja.
Comparar um export de banco contra uma cópia higienizada para parceiro
Antes de mandar um dump de clientes a um parceiro, você redige PII: e-mail vira [email protected], telefone é mascarado, nomes completos truncados à inicial. Faça diff do export original contra a cópia higienizada e confirme que somente as colunas redigidas mudaram. Se uma coluna billing_address aparecer inesperadamente no diff, seu script de redação esqueceu um campo, e você pega antes do arquivo sair do laptop.
Auditar um feed de produtos antes de subir para um catálogo de vendedor
Google Merchant Center, Facebook Catalog e a maioria dos marketplaces engolem um feed CSV (ou TSV). Depois que seu CMS regerar o feed, faça diff contra a cópia conhecida boa de ontem à noite para pegar uma regex que tirou os zeros finais do price, uma coluna de disponibilidade que virou de in_stock para out_of_stock em todas as linhas por causa de um bug do IF(), ou um novo campo GTIN que seu time adicionou sem avisar ninguém.
Diff entre dois exports CSV de Salesforce ou HubSpot
Quando alguém de operações comerciais pergunta "quais contatos mudaram desde a semana passada?", exporte o mesmo relatório duas vezes (antes e agora) e dê diff nos dois arquivos. O CSV não vem ordenado por ID de registro por padrão, então ordene os dois lados pela coluna ID primeiro; senão cada linha parece embaralhada. Depois de ordenar, mudanças reais (um status de lead que passou de MQL para SQL, um e-mail corrigido após bounce) aparecem nítidas.
Comparar a saída de um pipeline com a de ontem
Um job ETL noturno escreve um CSV no S3. A contagem de linhas de hoje está suspeitamente diferente da de ontem. Pega os dois arquivos, faz diff, e você acha a deriva de esquema: apareceu uma coluna nova no meio da tabela porque a API a montante adicionou um campo, e isso deslocou cada célula a jusante em uma posição. O diff pega a mudança estrutural na hora, onde uma checagem de contagem de linhas sozinha só te diria que algo está fora.
Revisar um CSV de resultado de teste A/B do time de stats
Seu cientista de dados manda um CSV com os resultados do experimento. Eles rodam de novo a análise depois de um ajuste metodológico. Diff entre v1 e v2: só mudaram as colunas das estatísticas do teste, ou os contadores de atribuição também se mexeram (o que indicaria que a definição de coorte mudou)? Comparar honestamente as saídas de análise é a checagem mais barata antes de subir uma feature baseada no resultado.
Referência rápida de CSV
Uma cola curta para os casos de borda de parsing que esta ferramenta expõe com mais frequência. A referência gramatical é a RFC 4180 mais o que ferramentas reais de planilha de fato emitem.
| Topic | What this tool does |
|---|
| Aspas conforme RFC 4180 | Campos contendo vírgulas, aspas duplas ou quebras de linha precisam ser envolvidos em aspas duplas. "Widget, small" é um campo só. Valores simples como 4.99 não precisam de aspas. Veja RFC 4180. |
|---|
| Aspas duplas escapadas | Uma " literal dentro de um campo entre aspas é escapada duplicando-a. "He said ""hi""" é o valor He said "hi". Escape com barra invertida não é CSV padrão, mesmo que algumas ferramentas aceitem. |
|---|
| Quebras de linha embutidas | Quebras de linha são permitidas dentro de um campo entre aspas conforme a RFC 4180. Um endereço em várias linhas dentro de uma célula é CSV válido. O diff trata cada linha física como uma unidade, então um campo com quebra de linha pode mostrar mudanças na linha que o envolve. |
|---|
| Finais de linha (CRLF vs LF) | A RFC 4180 manda CRLF (\r\n). Excel emite CRLF. A maioria das ferramentas Unix emite LF. Misturar os dois entre os painéis esquerdo e direito faz cada linha parecer alterada. Normalize os finais antes de comparar. |
|---|
| BOM (UTF-8) | CSVs salvos pelo Excel costumam começar com BOM UTF-8 (EF BB BF). A FAQ do BOM Unicode marca como opcional e desnecessário para UTF-8. Um BOM divergente entre os dois arquivos produz um diff fantasma na linha 1. |
|---|
| Dialetos de delimitador | Vírgula é o padrão; exports de Excel europeu usam ponto e vírgula (;) porque a vírgula é o separador decimal em muitas localidades. TSV (separado por tab) é uma variante comum; veja o contexto do TSV. Os dois arquivos precisam usar o mesmo delimitador para um diff que faça sentido. |
|---|
| Linhas de cabeçalho | Esta ferramenta trata a linha 1 como dado. Renomear uma coluna aparece como diff de uma linha no topo. Se você só quer comparar as linhas do corpo, tire o cabeçalho dos dois painéis antes de colar. A maioria dos parsers (csv.DictReader do Python, pandas) trata a linha 1 como cabeçalho por convenção, mas o formato em si não exige. |
|---|
| Codificação | Apenas UTF-8 via FileReader no navegador. Latin-1 (ISO-8859-1) e Windows-1252 carregam mas mostram caracteres acentuados deformados. Converta com iconv ou "Save with Encoding" no VS Code antes de colar. |
|---|
Diff de CSV: perguntas frequentes
Reordenar linhas ou colunas de um CSV vai produzir um diff barulhento?
Sim: o motor compara caracteres linha por linha, então reordenar linhas ou colunas vai aparecer como diferença mesmo quando os dados são idênticos. É um diff de texto, com algumas ajudas de leitura cientes do CSV. Não há casamento por chave de linha, nem reconhecimento de reordenamento de colunas, nem entendimento semântico de tipos. Para esse nível de comparação, use uma ferramenta como csvkit, pandas com merge em chave primária, ou carregue os dois arquivos no SQLite e rode uma query EXCEPT. Para comparação de planilhas no dia a dia, esta ferramenta cobre a maior parte do que você precisa.
Como lidar com finais de linha CRLF do Windows vs LF do Unix?
O Excel escreve CSV com CRLF (\r\n), o csv.writer do Python normalmente escreve LF (\n), e um pipeline shell pode produzir qualquer um dependendo das flags. Se um painel é CRLF e o outro LF, o diff vê diferença em cada linha. A solução é normalizar os dois lados antes de colar: abra-os no mesmo editor e salve com um único final, ou passe um deles por dos2unix ou unix2dos. A RFC 4180 manda CRLF, mas arquivos CSV no mundo real usam qualquer um.
A ferramenta lida com reordenamento de colunas?
Não. Isto é um diff de texto linha a linha. Se a linha 1 tem as colunas na ordem sku,name,price à esquerda e name,sku,price à direita, cada célula em cada linha vai parecer alterada porque o diff vê texto cru, não um modelo de colunas. O mesmo vale se você ordenar os arquivos por colunas diferentes. Reordene colunas e linhas para casarem antes do diff, ou recorra a uma ferramenta ciente de chaves como o csvjoin do csvkit ou um merge do pandas quando o modelo de colunas realmente importa.
Como a ferramenta lida com o BOM UTF-8 que o Excel adiciona?
O Excel no Windows costuma escrever um byte order mark UTF-8 no início de um CSV (os bytes EF BB BF), embora a FAQ do BOM Unicode diga que ele é desnecessário para UTF-8. Se um dos seus arquivos tem BOM e o outro não, você verá um diff fantasma de um caractere na linha 1, coluna 1. Abra o arquivo num editor de texto sério (VS Code, Notepad++, Sublime) e salve de novo sem BOM, ou tire os três primeiros bytes na mão antes de colar.
Quais codificações a ferramenta aceita?
UTF-8 é a única codificação que o caminho do FileReader decodifica corretamente aqui. Um arquivo Latin-1 ou Windows-1252 vai carregar, mas caracteres acentuados aparecerão deformados (ex.: café vira café). UTF-16 com BOM aparece completamente quebrado. Converta arquivos não UTF-8 antes: no terminal, iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; no VS Code, use "Reopen with Encoding" e depois "Save with Encoding" para UTF-8. O módulo csv do Python e o pandas permitem especificar a codificação de origem na leitura.
De que tamanho de CSV consigo fazer diff?
Até alguns MB tudo bem e parece instantâneo. Acima de 10 MB o navegador começa a sentir, e a maior parte do custo é renderizar o diff destacado (não calcular). Para exports muito grandes (50 MB+), filtre os dois arquivos antes para as colunas ou linhas que realmente importam. csvcut e csvgrep do csvkit, jq para CSV convertido em JSON, ou um awk/grep rápido servem como pré-processamento. Aí você cola a fatia recortada aqui.
Privacidade e como isto funciona
Seu CSV nunca sai do seu navegador. O leitor, o diff e a renderização rodam todos na sua máquina, localmente. Sem analytics da sua entrada, sem logs, sem ida e volta "prestativa" para a nuvem. Para conferir, abra o DevTools, vá na aba Network e fique de olho. Não há requisições saindo quando você compara. A referência de formato é a RFC 4180, e a documentação do módulo csv do Python é a referência que usamos para conferir os casos de borda de parsing.