Python

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
El problema

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 síntoma

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?

Python
gastos = []

gastos.append({
    "fecha": "2026-08-27",
    "categoria": "Comida",
    "valor": 18000
})

gastos.append({
    "fecha": "2026-08-27",
    "categoria": "Transporte",
    "valor": 6500
})

print(gastos)
Observa lo que ocurre

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.

Mientras Python está ejecutándose

La lista existe y el programa puede trabajar con ella.

Cuando el programa termina

Esa información deja de formar parte del estado del proceso.

Idea fundamental

Una variable puede vivir durante toda la ejecución de un programa sin que eso signifique que sus datos hayan sido guardados permanentemente.

Memoria y persistencia

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.

RAM

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.

DISCO

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.

Programa
Datos en memoria
Programa termina

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.

El cambio de perspectiva

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.

Variable
Guardar
Archivo
Lo importante

El programa puede desaparecer. El archivo puede permanecer. Después podremos abrirlo, recuperar la información y continuar trabajando.

Diferencia entre datos temporales en memoria RAM y datos persistentes guardados en un archivo
La información que vive únicamente en memoria desaparece con el programa; un archivo permite conservarla para futuras ejecuciones.
Primer formato

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.

Python
with open(
    "notas.txt",
    "w",
    encoding="utf-8"
) as archivo:
    archivo.write("Hoy gasté 18000 pesos en comida.")
Lee el código

¿Qué está haciendo with open()?

Aunque esta instrucción tiene varias partes, cada una responde a una pregunta muy concreta.

"notas.txt"

Indica qué archivo queremos abrir o crear.

"w"

Le dice a Python que queremos escribir en el archivo.

encoding="utf-8"

Define cómo se representan caracteres como letras, tildes y símbolos.

as archivo

Nos da una referencia que utilizamos para trabajar con el archivo abierto.

Abrir
Escribir
Cerrar

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().

Resultado

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.

notas.txt
Hoy gasté 18000 pesos en comida.
Persistencia conseguida

Podemos cerrar Python y el archivo seguirá almacenado. Ya tenemos una primera forma de hacer que nuestros datos sobrevivan.

Cuidado

"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.

Antes de ejecutar

Imagina que notas.txt contiene: Primera nota.

Python
with open(
    "notas.txt",
    "w",
    encoding="utf-8"
) as archivo:
    archivo.write("Segunda nota")
Observa

La primera nota desapareció

Después de ejecutar el código anterior, el archivo no contiene ambas notas.

notas.txt
Segunda nota
La causa

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?

Modos de apertura

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.

Python
with open(
    "notas.txt",
    "a",
    encoding="utf-8"
) as archivo:
    archivo.write("\nTercera nota")
Resultado

Ahora sí estamos agregando información

notas.txt
Segunda nota
Tercera nota

El carácter \n representa un salto de línea. Sin él, el nuevo texto quedaría inmediatamente después del anterior.

El viaje de regreso

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.

Archivo La información quedó almacenada.
Leer Python recupera su contenido.
Variable Podemos trabajar nuevamente con los datos.
Python
with open(
    "notas.txt",
    "r",
    encoding="utf-8"
) as archivo:
    contenido = archivo.read()

print(contenido)
Ciclo completo

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.

Una nueva dificultad

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.

gastos.txt
2026-08-27,Comida,18000
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?

Datos tabulares

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
La pista visual

Cuando cada registro tiene los mismos campos y nuestros datos pueden imaginarse como una tabla, CSV suele ser un formato natural.

Una buena práctica

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.

Regla práctica

Python ya incluye el módulo csv. Si Python conoce el formato, es mejor dejar que la biblioteca se encargue de sus reglas.

Python
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)
Resultado

Nuestros diccionarios se convirtieron en filas

DictWriter resulta especialmente cómodo porque cada gasto ya está representado mediante un diccionario.

gastos.csv
fecha,categoria,valor
2026-08-27,Comida,18000
2026-08-27,Transporte,6500
writeheader()

Escribe los nombres de las columnas.

writerows()

Escribe varios diccionarios como filas del archivo.

Python
import csv

with open(
    "gastos.csv",
    "r",
    newline="",
    encoding="utf-8"
) as archivo:

    lector = csv.DictReader(archivo)

    for gasto in lector:
        print(gasto)
Observa el resultado

CSV recupera las columnas, pero no adivina nuestros tipos

Una de las filas recuperadas puede verse aproximadamente así:

Objeto recuperado
{'fecha': '2026-08-27', 'categoria': 'Comida', 'valor': '18000'}
¿Lo notaste?

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.

Python
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
        )
El límite de una tabla

¿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.

Python
configuracion = {
    "moneda": "COP",
    "presupuesto": 800000,
    "alertas": True,
    "categorias": [
        "Comida",
        "Transporte",
        "Tecnología"
    ]
}
Una estructura diferente

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.

Estás viendo solo el 60% del contenido. Hazte Premium para acceder a la guía completa.

Comunidad

Comentarios y valoraciones

No hay comentarios aún. ¡Sé el primero en opinar!