Skip to content
Empieza gratis

¿Cómo guardo un CSV que se abra bien del otro lado?

Elige cómo escribir un CSV según quién lo va a leer: con BOM para quien lo abre en Excel, con punto y coma y coma decimal para un sistema que los espera, y sin la columna de índice de pandas.

Curso gratis. Tu Maestro, una IA, .

Hasta ahora fuiste el que recibe. Ahora te toca mandar: el reporte de ventas de septiembre y octubre va para dos personas. Tu jefa lo va a abrir con doble clic en Excel. Y el proveedor de Valencia, que te pidió las mismas cifras para planear sus envíos, lo va a cargar en su sistema, que espera el mismo formato que él manda: punto y coma y coma decimal.

Todo lo que aprendiste al leer sirve al revés. Un CSV no dice su codificación, no dice su separador, no dice qué columnas son texto. Así que la pregunta para escribir no es "¿cuál es el formato correcto?", sino "¿quién lo va a leer y qué va a suponer?".

  • Alguien con doble clic en Excel. Microsoft documenta que un CSV en UTF-8 se abre normalmente "si se guardó con BOM". Esa es tu oportunidad de que el BOM juegue a tu favor: escríbelo y los acentos de Mérida llegan bien.
  • Un sistema que espera punto y coma. Le das exactamente lo que espera: ; entre columnas y , como marca decimal. Si no sabes qué espera, pregúntalo antes de mandar.
  • Otro programa o un script. UTF-8, coma, punto decimal y fechas como 2026-09-02. DuckDB, por ejemplo, documenta que su COPY siempre escribe en UTF-8.

Desde Excel

Si el archivo sale de una hoja de Excel, Microsoft da dos caminos para guardar un CSV, según el formato que elijas:

  1. Ve a Archivo y selecciona Guardar como o Guardar una copia.
  2. En la lista de Nombre de archivo, elige CSV (delimitado por comas)(*.csv). Microsoft indica que hay otros formatos CSV si te desplazas hacia abajo.
  3. Selecciona Guardar.
  1. Ve a Archivo y selecciona Guardar como o Guardar una copia.
  2. En la lista de Formato de archivo, elige CSV UTF-8 (delimitado por comas)(*.csv). Hay otros formatos CSV si te desplazas hacia abajo.
  3. Selecciona Guardar.

Tres avisos de Microsoft. Primero, la página de guardar CSV nombra los dos formatos, pero no dice si el de UTF-8 lleva BOM: no lo des por hecho, y si el archivo va para alguien que lo abre con doble clic, revisa sus primeros tres bytes, como hace revisar.py en el ejercicio de abajo. Segundo, "al guardar un libro en cualquiera de los formatos de texto, se quitará todo el formato": colores, anchos de columna y demás formato no viajan en un CSV. Excel también te recuerda, con un cuadro de diálogo, que solo se guarda la hoja actual. Tercero, Excel para la Web hoy no guarda CSV; desde ahí, Edición > Abrir en la aplicación de escritorio.

Y recuerda lo del módulo 3: si la hoja ya perdió ceros o dígitos, el CSV que guardes los habrá perdido también.

Error común: Windows-1252 solo si te lo piden

Si un sistema viejo te pide Windows-1252, encoding="cp1252" lo escribe. Pero esa tabla no tiene lugar para todo: en la caja de arena, un emoji en un comentario hizo fallar la escritura con UnicodeEncodeError. Usa UTF-8 salvo que el lector exija otra cosa.

Escribir el reporte para tu jefa

Ejemplo resuelto · 4 pasos

Tu jefa abre el reporte de ventas con doble clic en Excel. Con las opciones por omisión, to_csv escribe una columna de índice y no escribe BOM. ¿Qué cambias y en qué orden lo piensas? Intenta cada paso antes de abrirlo.

Piensa el siguiente paso por tu cuenta y luego ábrelo para comparar.

Inténtalo

El proyecto tiene el reporte en datos/ventas.csv y un script, exporta.py, que escribe los dos archivos con las opciones por omisión. Al final llama a revisar, que imprime si cada archivo empieza con BOM y su contenido tal cual. Corre uv run exporta.py y mira qué recibiría cada quien. Luego cambia las dos llamadas a to_csv: la primera ya la viste resuelta arriba; la segunda es para ti. Si no sabes qué opción le falta a un archivo, pregúntale a tu Maestro.

Tu turno

Corre uv run exporta.py. Cambia las dos llamadas a to_csv para que: para_excel.csv salga sin la columna de índice y con BOM; y para_valencia.csv salga sin índice y sin BOM, con ; entre columnas, coma decimal y siempre dos decimales (1520,00). No cambies revisar.py ni los datos.

    Python 3.12· corre con tu cuenta

    Comprueba lo que sabes: Mandas a tu jefa un CSV hecho con pandas. Lo abre con doble clic y ve Mérida. Lo escribiste con to_csv("reporte.csv", index=False). ¿Qué cambias?