CSV original
CSV modificado

Diff de CSV: comparar dos archivos CSV online

Pega o sube dos archivos CSV y ve las filas, precios y campos que cambiaron lado a lado. Funciona en tu navegador, sin registro, sin subida.

¿Qué es la herramienta de diff de CSV?

Una herramienta gratuita en el navegador para comparar dos archivos CSV. Pega el export del proveedor de ayer a la izquierda, el de hoy a la derecha, y las celdas que cambiaron se iluminan. Nada sale de tu máquina. Sin cuenta, sin subida, sin cuotas.

El diff es a nivel de carácter, con una pasada de post-procesamiento semántico que lleva los resaltados al valor completo del campo en lugar de dispersarlos entre las comas. La gramática que asume esta herramienta es la especificación CSV de facto, RFC 4180: campos separados por comas, comillas dobles opcionales, comillas duplicadas para escapar una comilla literal, finales de línea CRLF.

Si alguna vez has abierto dos listas de precios de proveedor de 8.000 filas en Excel, te has desplazado columna a columna intentando localizar el SKU cuyo precio se movió, y has tirado la toalla, esta es la herramienta que te lleva al cambio en segundos. Para prosa libre usa nuestra herramienta de diff de texto. Para datos estructurados con claves estables, el diff de JSON gestiona el reordenamiento de objetos mucho mejor que el CSV. El diff de XML es la elección correcta para exports de datos heredados de ERPs antiguos.

Cómo funciona el diff en realidad

La comparación es línea a línea, consciente de los caracteres. Las inserciones aparecen en verde a la derecha, las eliminaciones en rojo a la izquierda. La pasada en modo línea mantiene un rendimiento razonable en archivos de 5 MB, y luego un refinado en modo carácter sobre las líneas cambiadas saca a la superficie el campo exacto que se movió. Para la mayoría de los exports de hoja de cálculo, esto es más rápido y limpio que ejecutar diff en una terminal.

Seamos honestos sobre lo que esto no es. Es un diff de texto, no una comparación verdaderamente consciente de las claves de fila. Si reordenas filas ordenando por una columna distinta, cada línea parecerá cambiada aunque los datos subyacentes sean idénticos. Si reordenas columnas, pasa lo mismo. Aquí no hay noción de clave primaria, como sí la dan csvkit con csvjoin o pandas con un merge sobre un SKU. Ordena ambos archivos del mismo modo antes de pegar, o usa una de esas herramientas cuando realmente necesites comparación basada en conjuntos.

La fila de cabecera es datos para esta herramienta. La línea 1 se trata como cualquier otra, lo que significa que un cambio de nombre de cabecera aparece como un diff de una línea arriba. Eso suele ser justo lo que quieres al revisar deriva de esquema. Si solo te importan las filas del cuerpo, quita la cabecera de ambos lados antes de pegar. El propio formato CSV, incluyendo las convenciones de cabecera, está descrito en el artículo de fondo sobre CSV y en RFC 7111, que define fragmentos de URI para seleccionar rangos de celdas dentro de un recurso CSV.

Cómo comparar archivos CSV en tres pasos

Dos paneles de texto, un diff. Sin registro, sin subida, sin ida y vuelta al servidor.

  1. 1

    Pega o sube tu CSV

    Pega el CSV antiguo a la izquierda y el más nuevo a la derecha. O pulsa Subir en cualquiera de los lados para cargar un archivo .csv, .tsv o .txt directamente desde el disco. El botón Ejemplo rellena ambos paneles con una pequeña lista de precios para que veas la herramienta en acción primero.

  2. 2

    Normaliza los finales de línea si hace falta

    Excel guarda CSV con CRLF (\r\n) en Windows; herramientas como csv.writer de Python o un pipeline de shell Unix suelen escribir LF (\n). Si un lado es CRLF y el otro LF, cada línea parecerá cambiada. Abre ambos en el mismo editor (o pásalos por dos2unix) antes de pegar para que coincidan los finales. El BOM UTF-8 al inicio de un CSV guardado por Excel es el otro culpable clásico; quítalo si tu otro archivo no lo tiene.

  3. 3

    Lee el diff

    Las eliminaciones se muestran resaltadas en rojo a la izquierda, las inserciones en verde a la derecha. Desplázate por cualquier lado y el otro le sigue. Busca precios cambiados, filas nuevas añadidas al final y direcciones de email corregidas en mitad de la lista. Los cambios de cabecera aparecen como diff de una línea en la línea 1.

Cuándo es la herramienta correcta el diff de CSV

Reconciliar un CSV de inventario de proveedor con tu último export

Un proveedor envía una lista de precios fresca cada semana. Suelta el archivo de la semana pasada en el panel izquierdo, el de esta semana a la derecha, y los movimientos de precio a nivel de SKU saltan a la vista sin necesidad de recorrer 4.000 filas en Excel cazando qué celda se puso amarilla. Hacerlo en Excel con VLOOKUP contra una segunda hoja es factible pero lento; el diff es más rápido cuando solo necesitas una comprobación rápida antes de subir los nuevos precios a tu tienda.

Comparar un export de base de datos con una copia saneada para un partner

Antes de enviar un volcado de clientes a un partner redactas la PII: el email pasa a [email protected], el teléfono se enmascara, los nombres completos se truncan a la inicial. Compara el export original con la copia saneada y confirma que solo cambiaron las columnas redactadas. Si en el diff aparece inesperadamente una columna billing_address, tu script de redacción se saltó un campo, y lo cazas antes de que el archivo salga de tu portátil.

Auditar un feed de producto antes de subirlo a un catálogo de comerciante

Google Merchant Center, Facebook Catalog y la mayoría de marketplaces se comen un feed CSV (o TSV). Tras regenerar el feed tu CMS, compáralo con la copia conocida de anoche para detectar una regex que quitó los ceros finales de price, una columna de disponibilidad que pasó de in_stock a out_of_stock en cada fila por culpa de un bug de IF(), o un nuevo campo GTIN que tu equipo añadió sin avisar.

Diff entre dos exports CSV de Salesforce o HubSpot

Cuando alguien de operaciones comerciales pregunta "¿qué contactos cambiaron desde la semana pasada?", exporta dos veces el mismo informe (entonces y ahora) y compara los dos archivos. El CSV no vendrá ordenado por ID de registro por defecto, así que ordena ambos lados por la columna ID primero; si no, cada fila parecerá reordenada. Una vez ordenado, los cambios reales (un estado de lead que pasa de MQL a SQL, un email corregido tras un rebote) salen a la vista.

Comparar la salida de un pipeline con la de ayer

Un job ETL nocturno escribe un CSV en S3. El número de filas de hoy es sospechosamente distinto al de ayer. Bájate los dos archivos, compáralos, y encuentras la deriva de esquema: apareció una columna nueva a mitad de tabla porque la API de origen añadió un campo, y eso desplazó cada celda de aguas abajo en uno. El diff caza el cambio estructural al instante, mientras que un check de número de filas a secas solo te diría que algo va mal.

Revisar un CSV con resultados de A/B test del equipo de stats

Tu data scientist entrega un CSV con los resultados del experimento. Vuelven a correr el análisis tras un ajuste metodológico. Compara v1 con v2: ¿solo cambiaron las columnas de estadística de test, o también se movieron los conteos de asignación (lo que querría decir que la definición de cohorte se movió)? Comparar honestamente los resultados de análisis es la verificación más barata antes de lanzar una funcionalidad basada en el resultado.

Referencia rápida de CSV

Una pequeña chuleta para los casos límite de parseo que esta herramienta saca a flote más a menudo. La referencia gramatical es RFC 4180 más lo que las herramientas de hoja de cálculo emiten en realidad.

TopicWhat this tool does
Comillas según RFC 4180Los campos que contengan comas, comillas dobles o saltos de línea deben ir entre comillas dobles. "Widget, small" es un único campo. Valores planos como 4.99 no necesitan comillas. Ver RFC 4180.
Comillas dobles escapadasUna " literal dentro de un campo entrecomillado se escapa duplicándola. "He said ""hi""" es el valor He said "hi". El escape con barra invertida no es CSV estándar, aunque algunas herramientas lo acepten.
Saltos de línea embebidosLos saltos de línea están permitidos dentro de un campo entrecomillado según RFC 4180. Una dirección de varias líneas dentro de una celda es CSV válido. El diff trata cada línea física como una unidad, así que un campo con salto de línea puede mostrar cambios en la línea de envoltorio.
Finales de línea (CRLF vs LF)RFC 4180 dice CRLF (\r\n). Excel emite CRLF. La mayoría de herramientas Unix emiten LF. Mezclar los dos entre el panel izquierdo y derecho hace que cada línea parezca cambiada. Normaliza los finales antes de comparar.
BOM (UTF-8)Los CSV guardados por Excel suelen empezar con un BOM UTF-8 (EF BB BF). La FAQ del BOM Unicode lo marca como opcional e innecesario para UTF-8. Un BOM desigual entre los dos archivos produce un diff fantasma en la línea 1.
Dialectos de delimitadorLa coma es el predeterminado; los exports de Excel europeo usan punto y coma (;) porque la coma es el separador decimal en muchas configuraciones regionales. TSV (separado por tabuladores) es una variante común; ver el contexto de TSV. Ambos archivos deben usar el mismo delimitador para un diff con sentido.
Filas de cabeceraEsta herramienta trata la línea 1 como datos. Un cambio de nombre de columna aparece como diff de una línea arriba. Si solo quieres comparar filas de cuerpo, quita la cabecera de ambos paneles antes de pegar. La mayoría de parsers (csv.DictReader de Python, pandas) tratan la línea 1 como cabecera por convención, pero el formato del archivo no lo exige.
CodificaciónSolo UTF-8 vía el FileReader del navegador. Latin-1 (ISO-8859-1) y Windows-1252 cargarán pero los caracteres acentuados se verán raros. Convierte con iconv o "Save with Encoding" de VS Code antes de pegar.

Diff de CSV: preguntas frecuentes

¿Reordenar filas o columnas de un CSV producirá un diff ruidoso?

Sí: el motor compara caracteres línea por línea, así que reordenar filas o columnas se mostrará como diferencias aunque los datos subyacentes sean idénticos. Es un diff de texto, con un par de ayudas de lectura conscientes del CSV. No hay coincidencia por clave de fila, ni conciencia de reordenado de columnas, ni comprensión semántica de tipos. Para ese nivel de comparación, usa una herramienta como csvkit, pandas con un merge sobre clave primaria, o carga ambos archivos en SQLite y lanza una consulta EXCEPT. Para la comparación diaria de hojas de cálculo, esta herramienta cubre la mayor parte de lo que necesitas.

¿Cómo gestiono finales de línea CRLF de Windows frente a LF de Unix?

Excel escribe CSV con CRLF (\r\n), csv.writer de Python suele escribir LF (\n), y un pipeline de shell puede producir cualquiera dependiendo de los flags. Si un panel es CRLF y el otro LF, el diff ve una diferencia en cada línea. La solución es normalizar ambos lados antes de pegar: ábrelos en el mismo editor y guárdalos con un único final de línea, o pásalos por dos2unix o unix2dos. RFC 4180 manda CRLF, pero los archivos CSV del mundo real usan cualquiera.

¿Maneja la herramienta el reordenado de columnas?

No. Esto es un diff de texto línea a línea. Si la fila 1 tiene las columnas en el orden sku,name,price a la izquierda y name,sku,price a la derecha, cada celda de cada línea parecerá cambiada porque el diff ve texto bruto, no un modelo de columnas. Lo mismo aplica si ordenas ambos archivos por columnas distintas. Reordena columnas y filas para que coincidan antes de comparar, o tira de una herramienta consciente de claves como csvjoin de csvkit o un merge de pandas cuando el modelo de columnas realmente importe.

¿Cómo gestiona la herramienta el BOM UTF-8 que añade Excel?

Excel en Windows suele escribir un byte order mark UTF-8 al inicio de un CSV (los bytes EF BB BF), aunque la FAQ del BOM Unicode indique que es innecesario para UTF-8. Si uno de tus archivos tiene BOM y el otro no, verás un diff fantasma de un carácter en la línea 1, columna 1. Abre el archivo en un editor de texto serio (VS Code, Notepad++, Sublime) y vuelve a guardar sin BOM, o quita los tres primeros bytes a mano antes de pegar.

¿Qué codificaciones acepta la herramienta?

UTF-8 es la única codificación que la ruta del FileReader decodifica correctamente aquí. Un archivo Latin-1 o Windows-1252 cargará pero los caracteres acentuados se verán raros (p. ej., café se convierte en café). UTF-16 con BOM se verá totalmente roto. Convierte primero los archivos no UTF-8: en la terminal, iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv; en VS Code, usa "Reopen with Encoding" y luego "Save with Encoding" a UTF-8. El módulo csv de Python y pandas te permiten especificar la codificación de origen al leer.

¿Qué tamaño de CSV puedo comparar?

Hasta unos pocos MB va bien y se siente instantáneo. Pasados los 10 MB el navegador empieza a notarlo, y la mayor parte del coste es renderizar el diff resaltado (no calcularlo). Para exports muy grandes (50 MB+), filtra primero ambos archivos a las columnas o filas que de verdad te importan. csvcut y csvgrep de csvkit, jq para CSV convertido a JSON, o un awk/grep rápido valen como pasada previa. Después pega aquí el recorte.

Privacidad y cómo funciona

Tu CSV nunca sale de tu navegador. El lector, el diff y el renderizado corren todos en tu máquina, en local. Sin analítica sobre tu entrada, sin logs, sin idas y vueltas "útiles" a la nube. Para comprobarlo, abre las DevTools, cambia a la pestaña Network y observa. No hay peticiones salientes cuando comparas. La referencia de formato es RFC 4180, y la documentación del módulo csv de Python es la referencia con la que cotejamos los casos límite de parseo.