O relatório de erros que me fez construir isto tinha três palavras: & quot; a sincronização está a largar linhas." Um feed de produtos client' s entrou como um CSV nocturno, o meu importador Laravel reescreveu-o, e algures entre os dois ficheiros um punhado de SKUs estavam a desaparecer O meu primeiro instinto foi o óbvio: lançar os dois ficheiros num diff de linha O diff voltou a vermelho sólido Cada linha era & quot; alterado, & quot; porque a exportação tinha sido re - ordenada por uma coluna diferente naquela noite, por isso a linha 4 no ficheiro antigo era a linha 900 no novo O diff de linha era tecnicamente correcto e completamente inútil O que EU realmente precisava era de uma ferramenta que entendesse que o ficheiro era uma tabela, combinasse cada linha com a sua contraparte pelo SKU, e dissesse-me quais os registos que foram genuinamente adicionados, removidos ou editados Essa ferramenta é a Toolz Verificador diff CSV, e este guia é o raciocínio por trás dele.
tl;dr: Um diff CSV compara dois arquivos CSV como dados estruturados em vez de linhas de texto Corresponder linhas por uma coluna de chave, como
idou
Eu construo produtos SaaS no Laravel e React e envio plugins WordPress, o que significa que passo muito tempo reconciliando exportações: um sistema' s view of the data against another' s, last night' s snapshot against tonight' s, o arquivo que um cliente jura que enviou contra o arquivo que realmente chegou CSV é a língua franca para tudo isso, e comparar dois CSVs corretamente é uma daquelas tarefas que parece trivial até que você tente fazer isso com a ferramenta errada Este é o guia que EU gostaria que a versão frustrada de mim tivesse lido.
O que é um verificador de diff CSV?
Um verificador de diff CSV pega dois arquivos CSV, uma versão original e uma alterada, e relata como a segunda difere da primeira no nível de linhas e células Em vez da saída de linhas adicionadas e excluídas de um diff de texto, você obtém quatro buckets: linhas que existem apenas no novo arquivo (adicionadas), linhas que existem apenas no arquivo antigo (removidas), linhas que existem em ambos, mas cujos valores diferem (alteradas) e linhas que são idênticas (inalteradas) Para cada linha alterada, uma boa ferramenta vai um nível mais fundo e nomeia as colunas específicas que se moveram, mostrando o valor antigo ao lado do novo.
A distinção que faz a coisa toda funcionar é como as linhas são emparelhadas nos dois arquivos. Um diff CSV pode corresponder a uma coluna de teclas, tratando um valor como um id ou um email como a identidade do registro, ou pode corresponder por posição, comparando a linha um com a linha um A correspondência de chaves é o que você deseja quase toda vez que estiver comparando exportações, porque o mesmo registro pode pousar em uma linha diferente cada vez que os dados são puxados A correspondência posicional é para arquivos onde o próprio número da linha é significativo e estável, como um livro-razão numerado que só é anexado. Escolher o modo certo é a decisão mais importante, e é por isso que a ferramenta Toolz o coloca na frente e no centro, em vez de adivinhar.
Por que um diff de linha fica completamente vermelho em uma exportação reordenada?
Esta é a falha que envia as pessoas que procuram uma ferramenta específica para CSV, por isso vale a pena entender com precisão Um diff de texto, do tipo incorporado no Git e em cada editor de código, compara arquivos linha por linha e em ordem Ele executa um algoritmo que encontra a maior subsequência comum de linhas e marca todo o resto como inserido ou excluído Isso é exatamente certo para o código-fonte, onde a ordem das linhas é o significado do arquivo Mover uma função e você realmente mudou o arquivo.
Uma exportação CSV é o oposto A ordem das linhas é geralmente um acidente de qualquer coisa ORDER BY a consulta passou a usar, e pode mudar entre duas execuções que contêm dados idênticos No momento em que a ordem de classificação muda, um diff de linha vê quase todas as linhas em uma nova posição, não consegue alinhá-las e relata todo o arquivo como alterado A informação que você queria, que três registros realmente mudaram, está enterrada sob milhares de falsos positivos O diff fez seu trabalho fielmente; ele apenas respondeu a uma pergunta sobre linhas quando você tinha uma pergunta sobre registros.
Um diff CSV corrige isso analisando o arquivo em linhas e colunas primeiro, depois comparando os registros por sua chave e não pelo número da linha. Reclassificar o arquivo não tem efeito, porque o SKU A-1007 é comparado à linha com SKU A-1007 no outro arquivo não importa onde qualquer um se senta Essa é toda a razão pela qual a categoria existe, e é por isso que EU alcancei o Ferramenta diff CSV em vez de git diff sempre que o arquivo for dado e não código.
O que o RFC 4180 tem a ver com a comparação de arquivos?
Tudo, porque você não pode comparar dois CSVs corretamente se você não pode analisá-los corretamente primeiro CSV foi usado por décadas antes de alguém padronizou Em 2005 o IETF publicado RFC 4180, que descreve o formato comum e o text/csv Tipo MIME. Não é uma lei que toda ferramenta obedece, mas é a coisa mais próxima de um contrato compartilhado, e define as regras que uma comparação ingênua erra.
A regra que mais importa é citar Um campo pode ser envolvido em aspas duplas, e deve ser se ele contém uma vírgula, uma aspa dupla, ou uma quebra de linha Uma aspa dupla dentro de um campo citado é escapado dobrando-o Então o valor "Doe, John" é um campo único e "She said ""hi""" é o valor She said "hi". Uma comparação que divide cada linha em vírgulas será cortada "Doe, John" em dois campos, deslocar cada coluna depois dele, e, em seguida, confiantemente relatar que a linha mudou quando não mudou O diff Toolz executa a mesma máquina de estado RFC 4180 que alimenta o Visualizador CSV: ele anda o texto caractere por caractere, rastreia se ele está dentro de um campo citado, e só trata uma vírgula ou uma nova linha como um separador quando ele está fora das aspas Obter a análise certa é uma pré-condição para obter o diff certo, e é a parte que rolou scripts à mão quase sempre pular.
Como faço para comparar dois arquivos CSV com a ferramenta?
O fluxo é curto propositadamente Cole o arquivo original na primeira caixa e o arquivo alterado na segunda, ou clique em Carregar amostra para ver um exemplo trabalhado onde uma linha é editada, uma é adicionada e uma é removida.
Confirme o delimitador Auto-detect scores vírgula, ponto e vírgula, tabulação e pipe pela consistência com que cada um divide as primeiras várias linhas no mesmo número de colunas, que lida corretamente com arquivos de ponto e vírgula europeus e exportações separadas por tabulação Se a detecção estiver errada para seus dados, defina-o manualmente Deixe o cabeçalho ligar se a primeira linha de cada arquivo contém nomes de colunas, que é o que alimenta o seletor de coluna de chave.
Agora escolha como as linhas são correspondidas Escolha uma coluna de teclas no menu suspenso, geralmente um id, email, ou SKU, e a ferramenta compara os registos por esse valor Selecione Posição em vez disso para comparar linha por linha Duas alternâncias refinam a comparação: ligue a correspondência sem distinção entre maiúsculas e minúsculas se Active e active deve contar como o mesmo valor, e deixar o trim-whitespace ligado para que um espaço de liderança perdido não se registre como uma alteração Clique em Comparar, e o resumo mostra quatro contagens num relance Abra a guia Alterado para expandir cada linha editada e veja exatamente quais células movidas, ou as guias Adicionado e Removido para ver as linhas completas como uma tabela Quando terminar, Copiar Relatório ou Download exporta um resumo em texto simples de cada diferença, incluindo o valor antes e depois de cada célula alterada, pronto para colar em uma solicitação pull, um ticket ou um e-mail para o cliente.
Quando devo combinar por chave versus por posição?
Esta é a escolha que determina se o diff é útil ou ruído, então aqui está a regra que uso, apresentada como uma tabela.
| situação | Combinar por | por que |
|---|---|---|
| Exportação de banco de dados ou API que pode ser reclassificada | Coluna principal | O mesmo registro cai em linhas diferentes, cada uma puxada; a chave é sua identidade estável |
| Reconciliando dois sistemas & #39; vista dos mesmos registros | Coluna principal | Você se importa se existe um registro e corresponde em ambos os lados, não onde ele está |
| Comparando a noite passada e o #39; snapshot com esta noite e #39;s | Coluna principal | As linhas são adicionadas e removidas ao longo do tempo, de modo que os números das linhas se desviam |
| Anexe apenas log ou livro-razão com um pedido fixo | Posição | O número da linha é estável e significativo; a linha N é genuinamente " o enésimo evento e cotação; |
| Dois arquivos que você conhece compartilham exatamente a mesma ordem de linha | Posição | Não existe nenhuma chave, mas a ordem é garantida idêntica |
| Um arquivo sem nenhuma coluna exclusiva | Posição | Não há nada para digitar, então compare em ordem e aceite a limitação |
A versão curta: alcance a correspondência de chaves por padrão, porque a maioria dos CSVs são exportações de registros que carregam um identificador Volte à correspondência posicional somente quando não houver uma chave utilizável ou quando a ordem da linha for genuinamente parte dos dados Se você escolher uma chave e a ferramenta avisar que a coluna contém valores duplicados, isso é um sinal de que a coluna não é realmente única, e você deve escolher uma chave melhor ou limpar a fonte Eu peguei mais de uma exportação quebrada precisamente porque a coluna & quot; unique" ID acabou não sendo.
Como mostra o que realmente mudou em uma linha?
Uma contagem de & quot;5 linhas alteradas" é um começo, mas a pergunta que você realmente tem é & quot; mudou como?" O diff Toolz responde que por linha Quando um registro correspondente difere, ele compara as duas versões coluna por coluna e lista apenas as células que se moveram, cada uma mostrada como o valor anterior percorrido ao lado do novo valor Uma linha de cliente onde apenas o plan coluna saiu free até pro relata aquela única célula, não todo o registro, então você não fica olhando duas longas filas tentando identificar o único campo que mudou.
Esta visualização no nível da célula é onde um diff CSV ganha seu keep sobre uma planilha' s próprios recursos de comparação, que tendem a destacar células com cor, mas não lhe dão nada para copiar ou colar em uma revisão O relatório exportado soletra cada mudança no texto: a chave da linha, o nome da coluna e o valor antigo e novo Na prática EU colar isso diretamente na descrição de uma solicitação pull para que um revisor possa ver o impacto dos dados de uma migração sem abrir os próprios arquivos É o mesmo instinto por trás da estrutural Diferença JSON0, que reporta as teclas alteradas com os seus caminhos em vez de alterações ruidosas nas linhas; ambas as ferramentas existem porque o & quot; o que mudou" é uma pergunta melhor do que o & quot; quais as linhas que diferem."
É seguro comparar arquivos CSV confidenciais online?
Para esta ferramenta, sim, e a razão é arquitetural ao invés de uma promessa mindinho Cada passo, analisando ambos os arquivos, combinando linhas, computando as diferenças por célula, e construir o relatório, é executado como JavaScript dentro de sua própria guia do navegador Não há upload, nenhum servidor ida e volta, e nada é registrado ou armazenado Você pode provar isso abrindo o seu navegador & #39; s tab rede e clicando Comparar: nenhum pedido sai da página Uma vez que a página carregou você pode se desconectar da internet inteiramente e ele continua funcionando.
Isso importa porque os CSVs pessoas diff estão entre os arquivos mais sensíveis que uma empresa possui listas de clientes, exportações de transações, linhas de folha de pagamento, tabelas de inventário, e logs de acesso todos viajam como CSV Uma ferramenta de comparação que carrega seus arquivos para um servidor, por mais bem-intencionado, transforma duas planilhas privadas em outra pessoa' s log entradas O processamento do lado do cliente remove a pergunta: os dados nunca saem da máquina que começou em Esse padrão é deliberado em todas as ferramentas no Toolz.dev, e EU escrevi o argumento mais longo no guia de privacidade de dados para ferramentas online para quem quiser o raciocínio completo.
Como um diff CSV se encaixa em um fluxo de trabalho real?
O diff raramente é o trabalho inteiro; é uma estação em um pipeline O padrão que EU acertei com mais frequência é a verificação: Eu executo uma importação ou uma migração, depois diff o antes e depois das exportações para confirmar o script fez exatamente o que EU esperava e nada mais Um diff limpo do & quot; três mudou, zero removido" é um sinal muito melhor de uma migração funcionou do que uma marca de seleção verde do script que o executou Quando o diff mostra uma remoção que EU não pretendia, EU peguei o bug antes que ele chegasse à produção em vez de depois.
As ferramentas ao seu redor dependem de para que serve o arquivo Se EU precisar olhar um arquivo como uma grade classificável antes de comparar, o Visualizador CSV renderiza a mesma análise RFC 4180 como uma tabela Se a comparação que EU quero é realmente sobre associação, quais valores aparecem em um arquivo, mas não o outro, em vez de quais linhas mudaram, o comparar duas listas ferramenta define aritmética em colunas únicas e é o melhor ajuste. E quando os dados precisam se tornar algo que uma API pode consumir, o Conversor CSV para JSON é o próximo salto Nenhum desses carrega seus dados, então você pode encadeá-los no mesmo arquivo privado sem pensar duas vezes Se você estiver montando um kit para esse tipo de trabalho de dados, meu Guia do kit de ferramentas para desenvolvedores web caminha sobre como as peças se conectam.
Perguntas frequentes
Como faço para comparar dois arquivos CSV? abra o Verificador diff CSV, cole o CSV original na primeira caixa e o CSV alterado na segunda, confirme as configurações de delimitador e cabeçalho, escolha uma coluna de teclas ou correspondência posicional e clique em Comparar O resultado é dividido em linhas adicionadas, removidas e alteradas, e cada linha alterada mostra as células exatas que diferem Tudo é executado em seu navegador, para que os arquivos nunca sejam carregados.
Qual é a diferença entre correspondência de chaves e correspondência de posição?
A correspondência de chaves emparelha linhas que compartilham o mesmo valor em uma coluna escolhida, como id0, portanto, um registo é comparado com o seu homólogo onde quer que apareça em qualquer dos ficheiros A correspondência de posição compara a linha um com a linha um na ordem dos ficheiros Usar a correspondência de chaves para exportações que podem ser re - ordenadas, e a correspondência de posições para ficheiros de ordem fixa como um registo apenas de apêndices.
Por que um diff de texto mostra cada linha alterada quando os dados mal se moviam? Porque um diff de texto compara os ficheiros linha por linha e por ordem Se a exportação for re-classificada, quase todas as linhas aterram numa nova posição e o diff marca todo o ficheiro como alterado, mesmo que os registos subjacentes sejam os mesmos Um diff do CSV analisa o ficheiro em linhas e colunas e compara os registos por chave, pelo que a re-classificação não tem efeito e apenas são comunicadas alterações genuínas.
Mostra qual célula específica mudou em uma linha? Sim. quando uma linha correspondente difere, a ferramenta lista cada coluna alterada pelo nome e mostra o valor anterior ao lado do novo valor Uma linha onde apenas a coluna de status passou de ativa para fechada relata essa única célula em vez de sinalizar toda a linha.
Que delimitadores suporta? Vírgula, ponto e vírgula, guia e tubo O delimitador é detectado automaticamente a partir do primeiro arquivo, escolhendo o separador que produz uma contagem de colunas consistente nas primeiras linhas, e você pode substituí-lo manualmente quando a detecção estiver errada para seus dados.
O que acontece se minha coluna-chave tiver valores duplicados? A ferramenta avisa que a coluna de teclas contém duplicatas e compara apenas a primeira linha para cada tecla As teclas duplicadas geralmente significam que a coluna não é um identificador exclusivo verdadeiro, portanto, o aviso é um prompt para escolher uma tecla diferente ou limpar os dados antes de confiar no diff.
Meus arquivos CSV são carregados em qualquer lugar? Não. Toda análise e comparação são executadas localmente em seu navegador com JavaScript simples. Nada é transmitido, registrado ou armazenado, e você pode confirmá-lo na guia de rede onde nenhuma solicitação aparece. A ferramenta também continua funcionando offline assim que a página for carregada.
Qual o tamanho de um arquivo que ele pode lidar? A correspondência de chaves usa mapas de hash em vez de loops aninhados, por isso é dimensionada aproximadamente linearmente e lida com dezenas de milhares de linhas confortavelmente O limite prático é o seu navegador renderizando um conjunto de resultados muito grande, não a comparação em si.



