Archivos de texto, CSV y JSON: datos que sobreviven al programa
Aprende a guardar y recuperar datos en Python usando archivos de texto, CSV y JSON. Entenderás qué significa persistencia, cuándo usar cada formato y cómo evitar perder información al cerrar el programa.
Contenido de la guía ⌄
- Tu programa funciona… pero olvida todo cuando termina
- Los datos existen, pero solo mientras el programa está vivo
- La memoria no es un cuaderno
- Memoria temporal
- Información persistente
- Guardar significa sacar información del ciclo de vida del programa
- TXT: la forma más sencilla de empezar
- ¿Qué está haciendo with open()?
- Ahora existe algo fuera del programa
- "w" puede borrar lo que ya estaba guardado
- La primera nota desapareció
- Leer, reemplazar o añadir
- Ahora sí estamos agregando información
- Guardar solo sirve si después podemos recuperar
- El segundo programa no recuerda al primero. El archivo sí.
- TXT funciona… hasta que nuestros datos empiezan a tener forma
- CSV: cuando nuestros datos parecen una tabla
- No construyas un CSV pegando comas manualmente
- Nuestros diccionarios se convirtieron en filas
- CSV recupera las columnas, pero no adivina nuestros tipos
- ¿Y si nuestros datos ya no caben naturalmente en filas y columnas?
- Esto ya no parece una tabla
Tu programa funciona… pero olvida todo cuando termina
Imagina que estás construyendo un pequeño programa para registrar tus gastos. Agregas una compra, otra más, consultas la lista y todo parece funcionar perfectamente.
Entonces cierras Python.
Al día siguiente vuelves a ejecutar el programa y descubres algo incómodo: la información que habías agregado ya no está.
El programa podía usar los datos mientras estaba funcionando, pero esos datos no quedaron guardados para la siguiente ejecución.
¿Cómo hacemos para que la información sobreviva incluso después de cerrar el programa?
gastos = []
gastos.append({
"fecha": "2026-08-27",
"categoria": "Comida",
"valor": 18000
})
gastos.append({
"fecha": "2026-08-27",
"categoria": "Transporte",
"valor": 6500
})
print(gastos)
Los datos existen, pero solo mientras el programa está vivo
Mientras Python ejecuta el código anterior, la variable gastos contiene nuestra lista y podemos recorrerla, modificarla, sumar sus valores o imprimirla.
El problema aparece cuando el proceso termina. La variable no es un archivo escondido en el computador: es parte del estado que el programa mantiene durante su ejecución.
La lista existe y el programa puede trabajar con ella.
Esa información deja de formar parte del estado del proceso.
Una variable puede vivir durante toda la ejecución de un programa sin que eso signifique que sus datos hayan sido guardados permanentemente.
La memoria no es un cuaderno
Para entender qué está ocurriendo necesitamos separar dos ideas: la información que utiliza un programa mientras trabaja y la información que queremos conservar después.
Memoria temporal
Variables, listas y diccionarios forman parte del estado que el programa utiliza mientras se está ejecutando. Cuando ese proceso termina, no debemos asumir que esos datos seguirán disponibles.
Información persistente
Un archivo puede permanecer almacenado después de que Python termine y puede ser leído nuevamente por una ejecución futura.
Si queremos encontrar esos datos mañana, la próxima semana o después de reiniciar el computador, necesitamos colocarlos en algún medio que pueda conservarlos.
A esa capacidad de conservar información más allá de una ejecución la llamamos persistencia de datos.
Guardar significa sacar información del ciclo de vida del programa
Nuestro objetivo no será impedir que una variable desaparezca. Eso forma parte del funcionamiento normal del programa.
Lo que haremos será tomar la información que nos interesa y escribir una representación de ella en un archivo antes de que el programa termine.
El programa puede desaparecer. El archivo puede permanecer. Después podremos abrirlo, recuperar la información y continuar trabajando.
TXT: la forma más sencilla de empezar
Empecemos con algo simple. Queremos guardar una nota para poder encontrarla incluso después de cerrar el programa.
Un archivo de texto es suficiente porque lo único que necesitamos conservar es una secuencia de caracteres.
with open(
"notas.txt",
"w",
encoding="utf-8"
) as archivo:
archivo.write("Hoy gasté 18000 pesos en comida.")
¿Qué está haciendo with open()?
Aunque esta instrucción tiene varias partes, cada una responde a una pregunta muy concreta.
Indica qué archivo queremos abrir o crear.
Le dice a Python que queremos escribir en el archivo.
Define cómo se representan caracteres como letras, tildes y símbolos.
Nos da una referencia que utilizamos para trabajar con el archivo abierto.
La ventaja de with es que Python se ocupa de cerrar correctamente el archivo cuando terminamos de trabajar con él, incluso si no escribimos manualmente archivo.close().
Ahora existe algo fuera del programa
Después de ejecutar el código aparece un archivo llamado notas.txt. Su contenido ya no depende de que la variable siga existiendo en memoria.
Podemos cerrar Python y el archivo seguirá almacenado. Ya tenemos una primera forma de hacer que nuestros datos sobrevivan.
"w" puede borrar lo que ya estaba guardado
El modo "w" es útil cuando queremos escribir un archivo desde cero, pero tiene una consecuencia importante: si el archivo ya contiene información, esa información será reemplazada.
Imagina que notas.txt contiene: Primera nota.
with open(
"notas.txt",
"w",
encoding="utf-8"
) as archivo:
archivo.write("Segunda nota")
La primera nota desapareció
Después de ejecutar el código anterior, el archivo no contiene ambas notas.
Abrir un archivo con "w" significa que queremos escribirlo nuevamente. Si ya existía contenido, debemos asumir que será reemplazado.
Entonces, ¿qué hacemos si queremos conservar lo anterior y simplemente agregar otra línea?
Leer, reemplazar o añadir
Para empezar no necesitamos memorizar todos los modos posibles de open(). Tres son suficientes para entender la mayoría de ejemplos iniciales.
r
Read
Abre un archivo existente para leer su contenido.
w
Write
Escribe desde cero y puede reemplazar el contenido anterior.
a
Append
Añade nueva información al final sin borrar lo que ya existe.
with open(
"notas.txt",
"a",
encoding="utf-8"
) as archivo:
archivo.write("\nTercera nota")
Ahora sí estamos agregando información
Tercera nota
El carácter \n representa un salto de línea. Sin él, el nuevo texto quedaría inmediatamente después del anterior.
Guardar solo sirve si después podemos recuperar
Hasta ahora hemos llevado información desde Python hacia un archivo. Pero la persistencia realmente se vuelve útil cuando una ejecución futura puede traer esos datos de vuelta.
with open(
"notas.txt",
"r",
encoding="utf-8"
) as archivo:
contenido = archivo.read()
print(contenido)
El segundo programa no recuerda al primero. El archivo sí.
La variable contenido acaba de nacer en esta nueva ejecución. No existía cuando escribimos el archivo.
Python pudo reconstruir esa información porque encontró una representación persistente en notas.txt.
Ya completamos el ciclo básico de persistencia: crear datos → guardarlos → terminar el programa → volver a ejecutarlo → recuperar los datos.
TXT funciona… hasta que nuestros datos empiezan a tener forma
Un archivo de texto es excelente para notas, mensajes o registros sencillos. Pero nuestro programa de gastos necesita conservar algo más organizado.
2026-08-27,Transporte,6500
2026-08-28,Café,7000
Podemos leer estas líneas como personas. Pero observa que cada una contiene exactamente las mismas clases de información: fecha, categoría y valor.
Si nuestros datos ya parecen filas y columnas, ¿por qué tratarlos solamente como texto libre?
CSV: cuando nuestros datos parecen una tabla
CSV significa Comma-Separated Values. Su idea es sencilla: representar registros en filas y separar sus campos mediante un delimitador.
| fecha | categoria | valor |
|---|---|---|
| 2026-08-27 | Comida | 18000 |
| 2026-08-27 | Transporte | 6500 |
| 2026-08-28 | Café | 7000 |
Cuando cada registro tiene los mismos campos y nuestros datos pueden imaginarse como una tabla, CSV suele ser un formato natural.
No construyas un CSV pegando comas manualmente
Podríamos intentar formar cada línea concatenando valores y comas. En ejemplos muy simples parecería funcionar.
El problema aparece cuando un valor contiene una coma, comillas o caracteres que necesitan un tratamiento especial.
Python ya incluye el módulo csv. Si Python conoce el formato, es mejor dejar que la biblioteca se encargue de sus reglas.
import csv
gastos = [
{
"fecha": "2026-08-27",
"categoria": "Comida",
"valor": 18000
},
{
"fecha": "2026-08-27",
"categoria": "Transporte",
"valor": 6500
}
]
campos = [
"fecha",
"categoria",
"valor"
]
with open(
"gastos.csv",
"w",
newline="",
encoding="utf-8"
) as archivo:
escritor = csv.DictWriter(
archivo,
fieldnames=campos
)
escritor.writeheader()
escritor.writerows(gastos)
Nuestros diccionarios se convirtieron en filas
DictWriter resulta especialmente cómodo porque cada gasto ya está representado mediante un diccionario.
2026-08-27,Comida,18000
2026-08-27,Transporte,6500
Escribe los nombres de las columnas.
Escribe varios diccionarios como filas del archivo.
import csv
with open(
"gastos.csv",
"r",
newline="",
encoding="utf-8"
) as archivo:
lector = csv.DictReader(archivo)
for gasto in lector:
print(gasto)
CSV recupera las columnas, pero no adivina nuestros tipos
Una de las filas recuperadas puede verse aproximadamente así:
El valor original era el número 18000. Después de leer el CSV tenemos la cadena "18000".
CSV representa sus campos como texto. Si nuestro programa necesita realizar operaciones matemáticas tendremos que convertir ese valor nuevamente.
import csv
with open(
"gastos.csv",
"r",
newline="",
encoding="utf-8"
) as archivo:
lector = csv.DictReader(archivo)
for gasto in lector:
valor = int(gasto["valor"])
print(
gasto["categoria"],
valor
)
¿Y si nuestros datos ya no caben naturalmente en filas y columnas?
CSV funciona muy bien para nuestro registro de gastos porque cada fila tiene la misma estructura. Pero ahora imaginemos que queremos guardar la configuración completa del programa.
configuracion = {
"moneda": "COP",
"presupuesto": 800000,
"alertas": True,
"categorias": [
"Comida",
"Transporte",
"Tecnología"
]
}
Esto ya no parece una tabla
Tenemos claves, números, un booleano y además una lista dentro del mismo diccionario.
Podríamos forzar esta información dentro de un CSV, pero hacerlo significaría luchar contra la forma natural de nuestros datos.
Necesitamos un formato capaz de conservar estructura, no solamente filas.
Comentarios y valoraciones
No hay comentarios aún. ¡Sé el primero en opinar!