Curso
En algún momento, todos los programas Python necesitan guardar algo: registros, resultados, entradas de los usuarios, archivos de configuración o datos procesados. Es posible que estés exportando resultados de análisis, registrando lo que hizo tu script o manteniendo el estado de la aplicación entre ejecuciones. Sea cual sea el caso, escribir en archivos es una habilidad básica de Python que usarás una y otra vez.
En esta guía, aprenderás a escribir en archivos en Python utilizando la biblioteca estándar. Comenzaremos con los conceptos básicos y luego pasaremos a los modos de archivo, las codificaciones, los formatos estructurados como JSON y CSV, y los patrones listos para la producción que hacen que tu código sea más seguro y predecible. Al final, podrás escribir archivos con confianza en aplicaciones reales, no solo en ejemplos sencillos.
Si ya te sientes cómodo con los conceptos básicos de Python, este tutorial te ayudará a salvar la distancia entre los scripts y el manejo de archivos a nivel profesional. Si deseas reforzar los conceptos básicos a medida que avanzas en Python, nuestros cursos Introducción a Python y Python intermedio combinan bien con este tutorial.
Aprende Python desde cero
Primeros pasos: Tu primer archivo escrito en Python
La forma más rápida de entender la escritura de archivos en Python es hacerlo realmente. Comencemos con el ejemplo más sencillo posible y sigamos avanzando a partir de ahí.
El patrón básico (paso a paso)
En esencia, escribir en un archivo sigue un patrón sencillo:
- Abrir un archivo
- Escribir contenido en él
- Cierra el archivo.
Python proporciona la función integrada ` open() ` para gestionar el primer paso.
La función open(), explicada de forma sencilla
La función ` open() ` conecta tu código Python a un archivo en el disco. Tú le dices dos cosas:
- ¿Con qué archivo quieres trabajar?
- Cómo quieres trabajar con él
Para escribir, el modo más común es « "w" », que significa «escribir». Si el archivo no existe, Python lo crea. Si existe, Python lo sobrescribe.
file = open("example.txt", "w")
file.write("Hello, world!")
file.close()
Ejecuta este script y Python creará un archivo llamado example.txt en el mismo directorio que tu código.
¿Qué acaba de pasar?
-
open("example.txt", "w")abre o crea el archivo -
write()envía texto al archivo -
close()vacía los datos y libera el archivo
Esto funciona, pero no es la forma adecuada de escribir archivos a largo plazo.
La forma correcta en Python: Uso de gestores de contexto
Abrir y cerrar archivos manualmente es fácil de olvidar y fácil de hacer mal. Por eso Python recomienda utilizar gestores de contexto.
He aquí por qué es mejor utilizar with: El uso de with garantiza que el archivo siempre se cierre correctamente, incluso si algo sale mal durante la escritura. Hace que tu código sea más seguro y fácil de leer.
with open("example.txt", "w") as file:
file.write("Hello, world!")
Una vez que finaliza el bloque ` with `, Python cierra automáticamente el archivo. Este patrón aparece en todas partes en el código Python profesional y vale la pena memorizarlo. Lo verás repetidamente en nuestro programa de programación en Python y en nuestro programa de escritura de código limpio en Python.
Ejemplo de escritura en un archivo con Python
Apliquemos esto a algo un poco más realista. Aquí voy a crear una entrada diaria en tu diario.
from datetime import date
today = date.today().isoformat()
with open("journal.txt", "a", encoding="utf-8") as file:
file.write(f"{today}: Practiced writing files in Python.\n")
Esto introduce dos ideas importantes:
-
Modo de adición (
"a") -
Redactar entradas estructuradas y repetibles
-
Cada ejecución añade una nueva línea sin eliminar las entradas anteriores.
Comprender los modos de archivo: Cuándo utilizar w, a, x y r+
Una vez que sabes cómo escribir en un archivo, la decisión más importante es cómo abrirlo. Los modos de archivo controlan si los datos se sobrescriben, se conservan o se protegen.
Modo de escritura (w): Empezar de cero
El modo de escritura crea un archivo si no existe. Si lo hace, también lo sobrescribe.
with open("report.txt", "w") as file:
file.write("Daily sales report\n")
Utiliza esto cuando quieras empezar de cero. Ten cuidado, porque este modo elimina los datos existentes de forma silenciosa.
Modo añadir (a): Añadir sin perder datos
El modo de añadir añade contenido al final de un archivo.
with open("activity.log", "a") as file:
file.write("User logged in\n")
Es ideal para registros y registros incrementales, y es uno de los modos más seguros para los sistemas de producción.
Modo exclusivo (x): Creación segura de archivos
El modo exclusivo crea un archivo solo si aún no existe.
try:
with open("config.txt", "x") as file:
file.write("initialized=true")
except FileExistsError:
print("File already exists.")
Esto resulta útil para scripts de configuración en los que sobrescribir sería arriesgado.
Modo lectura-escritura (r+): Modificar archivos existentes
Este modo permite leer y escribir, pero requiere que el archivo exista.
with open("notes.txt", "r+") as file:
content = file.read()
file.write("\nNew note added.")
La escritura se realiza en la posición actual del puntero del archivo, por lo que es importante comprender el movimiento del cursor en este caso.
Entonces, ¿qué modo deberías utilizar? Esta es mi guía mental:
-
Sobrescribir datos existentes →
w -
Conservar datos y añadir más →
a -
Evitar sobrescrituras →
x -
Lee y actualiza el mismo archivo →
r+
Para reforzar visualmente este proceso de decisión:

Elegir el modo de archivo adecuado suele depender de la intención: sobrescribir, añadir, proteger o modificar.
Escribir diferentes tipos de contenido en Python
Una vez que te sientas cómodo abriendo archivos con el modo adecuado, la siguiente pregunta es qué es lo que realmente estás escribiendo.
En los programas reales, no siempre escribes una sola cadena. Es posible que estés guardando listas, exportando resultados o trabajando con datos que no sean texto, como imágenes o archivos PDF. En esta sección, aprenderás a escribir diferentes tipos de contenido en archivos de forma segura y eficiente.
Escribir texto y cadenas
El caso más sencillo es escribir texto sin formato. Python ofrece dos métodos principales para ello: write() y writelines().
write() escribe exactamente lo que pasas, sin saltos de línea automáticos.
with open("example.txt", "w") as file:
file.write("First line\n")
file.write("Second line\n")
write() vs. writelines()
La diferencia clave es sencilla: write() escribe una cadena cada vez, mientras que writelines() escribe una secuencia de cadenas tal cual; writelines() no añade saltos de línea, por lo que cada elemento debe terminar con \n.
En la práctica, muchos programadores siguen prefiriendo write() en un bucle porque es más fácil de leer.
lines = ["One\n", "Two\n", "Three\n"]
with open("example.txt", "w") as file:
file.writelines(lines)
Escribir listas de manera eficiente
items = ["apple", "banana", "cherry"]
content = "\n".join(items)
with open("fruits.txt", "w") as file:
file.write(content)
La unión inicial reduce las escrituras repetidas en el disco, lo cual es importante para conjuntos de datos más grandes.
Escribir datos binarios
El modo binario ("wb") es necesario para los archivos que no son de texto.
binary_data = b"\x89PNG\r\n\x1a\n"
with open("image.bin", "wb") as file:
file.write(binary_data)
Trabajar con codificaciones en Python (por qué tu texto se ve mal)
Los problemas de codificación son uno de los errores más comunes y frustrantes en el manejo de archivos.
Especifica siempre UTF-8.
La codificación explícita evita problemas entre plataformas y caracteres dañados, como puedes ver aquí:
with open("example.txt", "w", encoding="utf-8") as file:
file.write("Café, résumé, naïve")
Ejemplo real: Texto multilingüe
Ser explícito aquí ahorra horas de depuración más adelante. Esto es lo que quiero decir:
customers = ["Ana García", "François Dupont", "Miyuki 山田"]
with open("customers.txt", "w", encoding="utf-8") as file:
for name in customers:
file.write(name + "\n")
Técnicas avanzadas de programación en Python
Una vez que te sientas cómodo escribiendo archivos en Python, el siguiente conjunto de problemas no suele ser cómo escribir, sino cómo hacerlo de forma segura y eficiente. Los archivos grandes, los fallos inesperados y los cuellos de botella en el rendimiento introducen casos extremos que aún no hemos tratado.
Manejo de archivos grandes con escrituras fragmentadas
La salida de streaming mantiene bajo el uso de memoria:
def generate_lines():
for i in range(1_000_000):
yield f"Line {i}\n"
with open("large.txt", "w", encoding="utf-8") as file:
for line in generate_lines():
file.write(line)
Atomic escribe: Prevención de la corrupción
La idea es evitar escrituras parciales si un programa se bloquea durante la actualización.
import os, tempfile
def atomic_write(path, content):
with tempfile.NamedTemporaryFile("w", delete=False) as tmp:
tmp.write(content)
os.replace(tmp.name, path)
Más allá de los archivos de texto: Escribir JSON y CSV
Una vez que tus datos tienen estructura, el texto sin formato deja de ser la mejor opción. Python facilita la escritura de formatos estructurados comunes como JSON y CSV, por lo que puedes almacenar datos de una manera que sea más fácil de compartir, inspeccionar y procesar posteriormente.
Escribir JSON
Cuando trabajas con diccionarios o datos anidados, JSON suele ser el formato más natural para escribir. El módulojson integrado en Python se encarga de la conversión por ti, por lo que no es necesario que formatees las cadenas manualmente.
import json
data = {"id": 1, "name": "Jeremiah"}
with open("user.json", "w", encoding="utf-8") as file:
json.dump(data, file, indent=2)
Escribir CSV
Si tus datos están en formato tabular y es probable que se abran en hojas de cálculo o herramientas de BI, CSV es la mejor opción. El módulo csv te ayuda a escribir filas de forma segura sin preocuparte por los delimitadores o las comillas.
import csv
rows = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
with open("users.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.DictWriter(file, fieldnames=["id", "name"])
writer.writeheader()
writer.writerows(rows)
Errores comunes al escribir en archivos en Python
Aunque escribir archivos en Python es sencillo, unos pocos errores pequeños suelen causar la mayoría de los problemas en el mundo real. Estos problemas no suelen estar relacionados con la sintaxis, sino que se deben a detalles que se pasan por alto, como la gestión de recursos, los modos de archivo o las opciones de rendimiento.
Ten en cuenta los siguientes puntos.
-
Olvidar cerrar archivos → usar
‘with’ -
Sobrescritura involuntaria de datos → modos de doble verificación
-
Ignorar la codificación → especificar siempre UTF-8
-
Escribir archivos grandes de forma ineficiente → salida por lotes o secuencial
La mayoría de los errores aquí provienen de pequeños descuidos, no de una lógica compleja.
Conclusión
Escribir en archivos en Python es sencillo al principio, pero los programas del mundo real exigen más cuidado. En esta guía, has pasado de escribir tu primer archivo a elegir modos de archivo seguros, manejar correctamente las codificaciones, exportar datos estructurados y aplicar patrones listos para la producción.
La conclusión clave es la intención: elige el modo adecuado, sé explícito con respecto a la codificación y escribe de forma defensiva cuando los datos sean importantes.
Conviértete en Desarrollador Python
Redactor técnico especializado en IA, ML y ciencia de datos, que hace que las ideas complejas sean claras y accesibles.
Preguntas frecuentes
¿Python puede escribir archivos de forma asíncrona?
Sí, con bibliotecas como aiofiles, aunque la mayoría de los scripts no lo necesitan.
¿Cuál es el modo de escritura más seguro?
Anexar ("a") o exclusivo ("x") dependiendo de la intención.
¿Por qué tu texto está dañado?
Incompatibilidad de codificación: utiliza siempre UTF-8.
¿Dónde se guarda tu archivo?
En relación con el directorio de trabajo del script.
¿Debería usar pathlib?
Sí, para un manejo más limpio y multiplataforma de las rutas.

