En esta entrada me gustaría que comencemos a aprender archivos en Python. Vamos a ver cómo crear y editar archivos desde nuestro código de manera segura, usando también try/except para manejar errores como se debe. ¡Venga, manos a la obra!
📓 Abre tu cuaderno de Jupyter Notebook que creaste en la lección anterior (8-Excepciones en Python) y vamos a crear un nuevo cuaderno para esta lección. Llámalo 9-Archivos en Python.
📚 Recursos externos para profundizar: Consulta la documentación oficial sobre lectura y escritura de archivos en Python y la documentación de la función open().
Archivos en Python 3: Crear, leer, abrir y ejecutar
![]()
Para crear un archivo en Python desde nuestro código encontrarás diferentes maneras, pero yo recomiendo utilizar la que aquí voy a explicar debido a que es más segura y óptima a la hora de modificar ficheros.
📝 Crear archivos en Python usando With
La cláusula with establece automáticamente un contexto para la ejecución segura debido a que crea un punto de partida de configuraciones iniciales y al finalizar recupera los valores anteriores. Y en el caso de la apertura de un archivo, este automáticamente lo cierra una vez terminada la función que lo involucre, así como también se realiza una limpieza de la memoria utilizada.
Por esto creo que la forma correcta de manipular archivos es utilizando la cláusula with, aunque veo muchos tutoriales y cursos donde se enseña a abrir y crear ficheros solo utilizando el método open (lo que no está mal pero tampoco es lo más óptimo).
De esta manera se utiliza un gestor de contexto «Context Manager», que son objetos que tienen definidos los métodos __enter__ y __exit__ para inicializar el contexto y para terminarlo, al igual que los objetos file, esto nos asegura que se cierre correctamente.
➡️ Abrir archivos en Python mediante el objeto file
Podemos manipular una variable como un objeto file (archivo) asignándole un archivo mediante la función integrada open e indicando la ruta del mismo seguido del modo en el cual vamos a abrirlo. Entonces la variable toma como valor el archivo y se convierte en un objeto file, permitiéndonos trabajar con ella utilizando los métodos.
Combinándolo con la cláusula with as lo hacemos de la siguiente manera:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - Abrir archivos
#
# Copyright 2018 https://pythones.net
# Forma clásica de crear un archivo:
f = open("archivotext.txt", "w") # Creamos el archivo
f.write("Creando archivo de texto en python de forma clásica") # Escribimos en el
f.close() # Cerramos el archivo
# Utilizando With As - Nuestra forma de hacerlo
with open("archivotext.txt", "w") as f: # Creamos el archivo
f.write("Creando archivo de texto en python usando with as") # Escribimos en el
Te recomiendo acostumbrarte a hacerlo utilizando la cláusula with as. Aunque su sintaxis es un poco más difícil de recordar, a mi forma de verla es mucho más segura y estable. Veamos y repasemos la sintaxis:
with open("Nombre", "modo de apertura") as objeto:
objeto.write() # Método escribir del objeto
# Recordar que las líneas debajo de with as deben ir identadas
Si ya has comprendido la sintaxis, ponla en práctica. Intenta crear un archivo «.py» que sea capaz de crear un «.txt».
⚙️ Métodos del objeto file en Python
Anteriormente habíamos visto que los métodos se podrían traducir como órdenes que le podemos dar a los objetos. Hace poco había visto un ejemplo en un sitio que decía que un objeto podría ser nuestro perro y un método las órdenes que le dictamos, las cuales le hemos enseñado con anterioridad (sentarse, rodar, dar la pata).
Un método puede ser una serie de sentencias para llevar a cabo una acción, pero en este caso podemos ver al método como el pedido a un objeto para que realice una tarea o un cambio.
Comprender los métodos del objeto file nos van a permitir manipular archivos en Python (crearlos, abrirlos, guardarlos o solo leerlos).
Es importante saber que cuando lo abrimos existe un puntero, que es donde se posiciona el intérprete sobre el archivo. Normalmente lo hace al inicio, pero si quisiéramos abrirlo con el puntero en determinada ubicación podríamos hacerlo con los métodos de los que dispone el objeto file.
Método Seek (byte)
Este método se corresponde al puntero que te mencionaba y junto al método tell() nos permitirá ubicarnos al final o al principio de los archivos. Pero el método seek() fue diseñado para archivos binarios, no para archivos de texto.
Este método moverá el puntero hacia el byte indicado como argumento.
seek(desplazamiento, desde_donde)
Si colocamos un cero ‘0’ como argumento a seek nos posiciona al inicio del archivo.
Método Tell()
El método tell() devuelve el puntero a una posición en un momento dado. Junto con seek() nos permitirán posicionarnos al principio o al final.
tell() nos devuelve un entero que indica la posición del puntero.
Método Read([bytes])
El método read() nos permite leer un archivo completo, salvo que indiquemos los bytes, entonces solo leerá hasta los bytes determinados. Vamos a ver cómo utilizarlo abriendo un archivo .txt:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - Método Read
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r") as f: # Abrimos de modo Read (r)
contenido = f.read() # Lo abrimos utilizando el metodo read y lo almacenamos en la variable
print(contenido) # Imprimimos la variable que tiene el contenido
(Contenido del archivo pirata.txt)
Presta atención a la letra «r» que colocamos como modo luego del nombre. Esto significa que lo abre solo para ser leído. Por ende no puede ser editado.
Y cuidado con esto porque si colocas una «w» de «Write» lo abrirás en modo escribir, y se borrará todo el contenido. Esto lo veremos más abajo en los Modos de apertura.
Método Readline([bytes])
El método readline() lee una línea por vez. Si colocamos un solo readline() nos leerá una sola línea y si no especificamos a partir de donde, será la primera por defecto. Veamos el código:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - Método Readlines
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r") as f: # Abrimos el archivo de modo read (r)
linea1 = f.readline() # Almacenamos en variable linea1 el método readline()
linea2 = f.readline() # Volvemos a almacenar en variable linea2 el método readline()
print(linea1)
print(linea2)
(Primera línea del archivo) (Segunda línea del archivo)
Cada vez que hagamos un readline() tomará la siguiente línea.
Imprimir o leer solo líneas específicas de un archivo en Python
En caso de querer imprimir una línea específica no podemos hacerlo con readline() correctamente. Aun posicionando el puntero con el método seek() porque el mismo fue creado con la idea de posicionar en archivos binarios, y en cambio los de texto se manejan línea a línea, por lo que sería un lio calcular dónde específicamente establecer el puntero si no es al principio o al final.
Suponiendo que quisiéramos imprimir a partir de la línea 34 a la 38 inclusive, deberíamos hacerlo iterando el archivo de texto con la función enumerate e imprimir solo las líneas que nos interesan. Dejo el código por si te resulta útil:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - Método Readlines
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r") as f:
estribillo = (linea for i, linea in enumerate(f) if 34 <= i <= 38)
for linea in estribillo:
print(linea)
Método Readlines()
Lee todas las líneas en forma de lista, separando las líneas con el carácter de escape para los saltos de línea «\n».
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - Método Readlines
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r") as f:
contenido = f.readlines() # Lo abrimos utilizando el método readlines y lo almacenamos en la variable
print(contenido)
['Línea 1\n', 'Línea 2\n', 'Línea 3\n', ...]
Método Write()
Sirve para escribir una cadena dentro del archivo. Para esto debemos abrirlo con modo de re-escribir, lo cual se hace agregando «r+» en el modo de apertura. De esta manera nuestra cadena se añadirá al final.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - método Write
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r+") as f: # Abrimos a modo Reescribir (r+)
contenido = f.read() # Lo abrimos utilizando read
f.write("Tierra santa - Canción del pirata") # Escribimos la nueva línea
Si no utilizas el f.read() la línea se añadirá al principio y no al final. También para agregarla al final puedes abrirlo como apertura «a» en vez de «r+» y sin incluir el .read(). Así:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "a") as f: # Abrimos usando el modo (a)
f.write("Tierra santa - Canción del pirata") # Escribimos la nueva línea
Método Writelines(secuencia)
Nos permite escribir una secuencia (elemento iterable) dentro del archivo línea a línea, por ejemplo: una lista.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file - método writelines
#
# Copyright 2018 https://pythones.net
Lista = ["Cancion\n", "sobre\n", "piratas\n"]
with open("pirata.txt", "r+") as f: # Lo abrimos como Reescribir (r+)
contenido = f.read() # Lo abrimos utilizando read
f.writelines(Lista) # Escribimos la Lista en el archivo linea a linea
Sin incluir el código opcional de mostrar las líneas editadas:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Archivos en Python 3 - file
#
# Copyright 2018 https://pythones.net
Lista = ["Cancion\n", "sobre\n", "piratas\n"]
with open("pirata.txt", "r+") as f: # Abrimos usando Reescribir (r+)
contenido = f.read() # Lo abrimos utilizando read
f.writelines(Lista) # Escribimos la Lista en el archivo linea a linea
Método Close()
El método close() se encarga de cerrar el archivo de forma segura. Si pretendes modificar archivos en Python luego de utilizar el método close() se producirá un error, debido a que ya se cerró. Deberás abrirlo nuevamente.
✅ Modos de apertura de archivos en Python
El modo de apertura de nuestros archivos es importante debido a que determinan varios factores a tener en cuenta y permiten abrir archivos tanto para solo lectura como para edición o reemplazo completo. Veamos cuáles son y cuál es su sintaxis a la hora de especificarlo.
| Modo | Descripción | Comportamiento |
|---|---|---|
"r" |
Solo lectura | Abre el archivo para leer. Error si no existe. |
"w" |
Escritura (trunca) | Crea el archivo o sobrescribe todo su contenido. |
"a" |
Añadir al final | Abre el archivo para escribir al final. Crea si no existe. |
"r+" |
Lectura y escritura | Abre el archivo para leer y escribir. Error si no existe. |
"w+" |
Lectura y escritura (trunca) | Crea el archivo o sobrescribe todo su contenido. Permite lectura. |
"a+" |
Lectura y añadir | Abre para lectura y escritura al final. Crea si no existe. |
Recuerda que tanto «w» como «w+» van a truncar los archivos en caso de existir, por lo que si abres un file existente, el mismo será sobrescrito y perderás su contenido.
🧑💻 Crear un programa para leer archivos desde Python
1️⃣ Utilizamos Try / Except para atrapar excepciones al abrirlo

Podemos agregar una sentencia try / except para en caso de generarse un error a la hora de abrir un archivo, por ejemplo en el caso que nos hayamos equivocado de ubicación. Veamos cómo aplicarlo en este caso de querer abrir un archivo para leerlo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# sin título.py
#
# Copyright 2018 https://pythones.net
with open("pirata.txt", "r+") as f:
contenido = f.read()
En este caso he eliminado el archivo de texto pirata.txt y por ende nos produce este error (obviamente porque lo estamos intentando abrir en modo «r+»; si lo intentáramos colocando el modo write («w+») el archivo se crearía y no nos daría ningún error):
Traceback (most recent call last):
File "archivo.py", line 8, in <module>
with open("pirata.txt", "r+") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'pirata.txt'
Como podemos interpretar en el error, nos está diciendo que el archivo no existe. Así que podemos hacer dos cosas: crear un try / except donde se le advierta al usuario, y también podemos pedirle al usuario que ingrese la ubicación donde debería estar el archivo.
2️⃣ Le preguntamos al usuario dónde se encuentra
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# sin título.py
#
# Copyright 2018 https://pythones.net
while True: # Creamos un bucle infinito
try: # Intentamos abrirlo
with open("pirata.txt", "r+") as f: # Abrimos el fichero a modo de Reescribir (r+)
contenido = f.read() # Lo abrimos utilizando el método read
print(contenido)
break # Rompemos el bucle
except:
print("Error al intentar abrir")
break # Rompemos el bucle
Hasta aquí creamos un bucle infinito utilizando while True y además añadimos un try/except en caso de que ocurra un error.
3️⃣ Forzamos a dar la ubicación en un input
Ahora vamos a colocar una variable como nombre de archivo, a la cual llamaremos dirarchivo y seguidamente vamos a colocar en el except un input para que el usuario se vea forzado a dar la ubicación de dicho archivo, quedando nuestro código así:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# sin título.py
#
# Copyright 2018 https://pythones.net
dirarchivo = "piratas.txt"
while True: # Creamos un bucle infinito
try: # Intentamos abrirlo
with open(dirarchivo, "r+") as f: # Abrimos utilizando Reescribir (r+)
contenido = f.read() # Lo abrimos utilizando el método read
print(contenido)
break
except:
print("Error al intentar abrir")
print(f"No se encuentra el archivo {dirarchivo}. Especifique su ubicación:")
dirarchivo = input("Dirección: ")
Espero que te haya encantado como a mí lo bien que funciona.
A tener en cuenta a la hora de utilizar archivos en Python
Aprender a trabajar correctamente los archivos nos abre muchas posibilidades, no solo el hecho de crear un texto. A mi forma de verlo, podemos manipular archivos del sistema y programas modificando configuraciones. También podemos crear un código que nos cree y edite otros «.py». O nos permite reescribir archivos masivamente. Suponiendo que tengas muchos archivos y quieras agregarles algún copyright o marca personal. Puede permitirte también crear un txt lleno de contraseñas, emails, información útil. ¡Que tu imaginación no te detenga solo en los cutres .txt!
Esto es todo mi querido lector. Me despido cordialmente esperando que te haya gustado esta entrada y por sobre todo te haya ayudado a comprender este maravilloso lenguaje. Un cordial abrazo y nos vemos en la siguiente entrada. ¡Gracias por visitar mi blog!
📅 Última actualización: julio 28, 2026
