Cómo comparar dos archivos CSV y ver qué cambió
La forma más rápida de comparar dos archivos CSV es pegar ambos en una herramienta de diff lado a lado, alinear las columnas y leer las filas que resalta. La comparación es la parte fácil. El ruido es lo que le complica la vida a la gente: una exportación reordenada, un punto y coma en lugar de una coma, o un valor que alguien envolvió entre comillas pueden hacer que dos archivos con los mismos datos parezcan no tener nada en común.
Esta guía explica cómo obtener un diff de CSV limpio y confiable. Veremos por qué dos exportaciones equivalentes se distancian en papel, qué métodos vale la pena conocer y un ejemplo práctico que puedes seguir. Si solo quieres la herramienta, nuestra página de comparación CSV hace todo esto en el navegador.
Por qué los archivos CSV son engañosamente difíciles de comparar
CSV parece simple, pero no tiene un único estándar estricto. Lo más cercano es RFC 4180, y muchos archivos del mundo real no lo siguen. Dos exportaciones de la misma tabla pueden diferir en delimitador, comillas, finales de línea y orden de filas mientras describen exactamente los mismos datos. Un diff de texto plano no sabe nada de eso, así que lo marca todo.
Esto es lo clave que debes decidir antes de empezar: ¿te importa el orden de las filas? Una exportación de base de datos ordenada por nombre y la misma exportación ordenada por ID contienen el mismo conjunto idéntico de registros, pero un diff de líneas pintará casi cada fila de rojo y verde. Si las filas tienen una clave estable (una columna de ID), ordenar ambos archivos por esa clave primero vuelve a hacer el diff legible.
| Lo que ves en el diff | ¿Es un cambio real? | Qué hacer |
|---|---|---|
| Filas en orden diferente | No, si los datos son el mismo conjunto | Ordena ambos archivos por una columna clave |
| Delimitador coma vs punto y coma | No, mismos campos | Normaliza a un solo delimitador |
Ada vs "Ada" | No, las comillas son opcionales aquí | Normaliza las comillas |
| Finales de línea CRLF vs LF | No | Normaliza los finales de línea |
| Una línea vacía al final | No | Elimínala |
| El valor de una celda cambió | Sí | Investígalo, esto es real |
La fila del delimitador confunde a mucha gente, sobre todo entre regiones: muchas configuraciones europeas usan punto y coma porque la coma es el separador decimal. Mismos datos, separador diferente. Si quieres el detalle sobre cómo los navegadores y las herramientas leen texto tabular, la nota de MDN sobre leer archivos en el navegador es un buen punto de partida.
Cuatro formas de comparar CSV y cuándo usar cada una
No existe un único método mejor. Depende del tamaño de los archivos y de si el orden de filas importa. Así se comparan las opciones más comunes.
| Método | Mejor para | Esfuerzo | ¿Entiende CSV? |
|---|---|---|---|
| Revisión visual | Archivos diminutos, un puñado de filas | Bajo | No, tú eres el parser |
| Herramienta diff online | Verificaciones rápidas, pegar desde cualquier lugar | Bajo | Fila por fila, sí |
| App de hoja de cálculo | Revisión visual, fórmulas, filtrado | Medio | Sí, pero manual |
Línea de comandos (sort, csvkit) | Archivos grandes, scripting, comparaciones por clave | Medio | Sí, cuando ordenas primero |
Para la mayoría de las personas, una herramienta de navegador gana en velocidad: nada que instalar, y puedes pegar una exportación directamente desde una descarga o un cliente de base de datos. El truco está en el ruido del orden de filas y del delimitador, que abordamos a continuación. Para archivos muy grandes, vale la pena aprender csvkit en la línea de comandos.
La comparación limpia más rápida, paso a paso
Esta es la rutina que uso cuando alguien me da dos exportaciones y pregunta "¿qué es diferente?" Tarda menos de un minuto.
- Asegúrate de que ambos archivos usen el mismo delimitador y tengan la misma fila de encabezado.
- Si el orden de filas no importa, ordena ambos archivos por una columna clave primero.
- Abre la herramienta de comparación CSV.
- Pega el original a la izquierda y la nueva versión a la derecha.
- Lee el resultado. El verde es una fila añadida, el rojo es una fila eliminada, y una celda modificada aparece como una de cada color.
El paso dos es todo el truco cuando las filas no están ordenadas. Una vez que ambos archivos están ordenados de la misma forma, lo único que queda por resaltar son las filas que realmente cambiaron. Nuestro motor de diff está construido sobre el diff-match-patch de Google, que compara línea por línea primero para que sea rápido incluso en archivos largos.
Un ejemplo práctico
Supón que estás revisando un cambio en una tabla de usuarios. Aquí está el antes:
id,name,role,seats
7,Ada Lovelace,editor,3
8,Alan Turing,viewer,1
Y aquí está el después, exportado en un orden de filas diferente:
id,name,role,seats
8,Alan Turing,viewer,1
7,Ada Lovelace,admin,5
Mete esos en un diff de líneas crudo y ambas filas de datos parecen
cambiadas, porque intercambiaron posición. Ordena ambos por la columna
id, y la historia real es breve:
| Fila (por id) | Columna | Antes | Después | Cambio |
|---|---|---|---|---|
| 7 | role | editor | admin | Modificado |
| 7 | seats | 3 | 5 | Modificado |
| 8 | — | — | — | Sin cambios (solo se movió) |
Una edición real: el rol y el número de asientos de Ada cambiaron. La fila
de Alan solo se movió. Ese ascenso de editor a admin
es exactamente el tipo de cosa que quieres detectar en revisión, y es fácil
perdérselo cuando está enterrado bajo filas que el diff marcó erróneamente
como cambiadas.
Eliminar el ruido del orden de filas en la línea de comandos
Si tus archivos ya están en disco y las filas no tienen un orden inherente, la misma idea de "ordenar primero" funciona con dos comandos cortos. Mantén el encabezado en su lugar y ordena el resto:
(head -1 old.csv; tail -n +2 old.csv | sort) > old.sorted.csv
(head -1 new.csv; tail -n +2 new.csv | sort) > new.sorted.csv
diff old.sorted.csv new.sorted.csv
Ahora diff solo reporta filas que realmente cambiaron, porque
ambos archivos están en el mismo orden. Para comparaciones por clave que
también ignoran el orden de columnas, csvsort y
csvjoin de csvkit te dan más control. Este es el equivalente
en terminal de ordenar ambos lados antes de comparar en el navegador.
Delimitadores, comillas y la realidad desordenada
Los archivos CSV reales rompen las reglas constantemente. Un campo que
contiene una coma debe ir entre comillas, así que "Lovelace, Ada"
es un campo, no dos. Las comillas dentro de un campo entre comillas se
duplican: "Ella dijo ""hola""". Y el separador mismo varía:
las hojas de cálculo en configuraciones con coma decimal exportan con punto
y coma, y los archivos separados por tabuladores (TSV) son comunes en los
pipelines de datos. Antes de comparar, asegúrate de que ambos archivos usen
el mismo delimitador y la misma convención de comillas, o normalízalos con
un parser que siga RFC 4180. De lo contrario, el diff está comparando dos
dialectos diferentes, no dos versiones de los mismos datos.
Errores comunes que debes vigilar
| Error | Por qué duele | Solución |
|---|---|---|
| Delimitadores no coincidentes | Coma vs punto y coma hace que cada campo parezca diferente | Normaliza a un solo delimitador primero |
| BOM al inicio | Una marca de orden de bytes oculta cambia la primera celda del encabezado | Elimina el BOM antes de comparar |
| IDs con ceros a la izquierda | Una hoja de cálculo puede haber convertido 007 en 7 | Mantén las columnas de ID como texto; compara como cadenas |
| Saltos de línea incrustados | Un campo entre comillas puede contener un salto de línea, desplazando cada fila posterior | Usa un parser CSV real, no una división por líneas |
| Espacios al final en las celdas | Espacios invisibles aparecen como un cambio | Recorta los valores de las celdas antes de comparar |
Cuándo una hoja de cálculo es la mejor herramienta
Un diff de texto es perfecto para detectar qué filas cambiaron y revisar el cambio como datos. Pero si necesitas filtrar, pivotar o comparar por fórmula a través de miles de filas, una hoja de cálculo encaja mejor: importa ambos archivos, alinéalos por clave y usa una búsqueda para marcar las discrepancias. Los dos enfoques se complementan. Usa el diff para una lectura visual rápida y la hoja de cálculo cuando necesites segmentar los datos. Para las reglas del formato subyacente en cualquier caso, el resumen de CSV de Wikipedia es una referencia sólida.
Herramientas relacionadas
CSV rara vez es el único formato que manejas. Si los mismos datos también viven como JSON, comparar JSON aplica la misma idea. Eliminar duplicados de una columna de valores es rápido con eliminar líneas duplicadas, y poner las filas en un orden predecible antes de un diff es para lo que está ordenar líneas.
Preguntas frecuentes
- ¿Comparar archivos CSV online los sube a algún servidor?
- En comparetext.org el diff se ejecuta en tu navegador. Los dos archivos CSV son comparados por JavaScript en tu propia máquina, así que nada se envía a un servidor a menos que hagas clic explícitamente en Guardar o Compartir. Esto lo hace seguro para exportaciones de clientes, datos financieros y otras hojas de cálculo que no querrías pegar en un sitio que sube todo en cada pulsación de tecla.
- ¿Por qué mis dos archivos CSV muestran cada fila como diferente?
- Casi siempre es el orden de filas o el delimitador, no cambios reales. Una exportación está ordenada de forma diferente a la otra, o una usa comas y la otra puntos y coma, o los finales de línea difieren. Asegúrate de que ambos archivos usen el mismo delimitador, luego ordena ambos por una columna clave para que el orden deje de importar. Después de eso, el diff suele reducirse al puñado de filas y celdas que realmente cambiaron.
- ¿Cómo comparo dos archivos CSV ignorando el orden de filas?
- Ordena ambos archivos por una columna clave estable antes de comparar. Si las filas tienen un ID, ordena por ese; de lo contrario, ordena la fila completa. Mantén la línea de encabezado en su lugar y ordena solo las filas de datos. En el navegador puedes pegar las versiones ordenadas; en la línea de comandos, ordena el archivo después del encabezado. Una vez que ambos archivos están en el mismo orden, solo aparecen en el diff las filas que realmente cambiaron en lugar de cada fila que simplemente se movió.
- ¿Por qué mi CSV usa puntos y coma en lugar de comas?
- Muchas configuraciones europeas usan la coma como separador decimal, así que las apps de hoja de cálculo exportan CSV con un delimitador de punto y coma para evitar ambigüedad. Los datos son los mismos; solo difiere el separador. Antes de comparar dos archivos, asegúrate de que usen el mismo delimitador, o verás cada campo marcado como cambiado. Normalizar ambos a comas (o ambos a puntos y coma) con una herramienta que entienda CSV lo soluciona. Los archivos separados por tabuladores tienen el mismo problema con un separador diferente.
- ¿Cómo comparo archivos CSV con órdenes de columnas diferentes?
- Un diff de texto plano compara filas de izquierda a derecha, así que las columnas reordenadas parecen un cambio total aunque los datos coincidan. Para manejarlo, reordena las columnas para que coincidan en ambos archivos primero, o usa una herramienta que entienda CSV y compare por nombre de encabezado en lugar de por posición. Herramientas de línea de comandos como csvkit pueden seleccionar y reordenar columnas por nombre. Una vez que las columnas se alinean en el mismo orden, un diff normal fila por fila vuelve a funcionar.
- ¿Puedo comparar archivos CSV grandes sin que la página se congele?
- Sí, hasta cierto punto. Un diff en modo de líneas se mantiene rápido en archivos con miles de filas porque compara líneas completas primero en lugar de cada carácter. Los archivos muy grandes (decenas de megabytes o millones de filas) se manejan mejor con una herramienta de línea de comandos como csvkit o una importación a base de datos, que transmiten los datos. Para una exportación que puedas desplazar cómodamente en un navegador, un diff online es la opción más rápida.
¿Listo para probarlo? Pega tus archivos en la herramienta de comparación CSV y ve qué cambió.