Cómo lee Python un archivo de texto
Python lee un archivo de texto con open y lo cierra solo si usas with. Cuando una línea trae un dato malo, try y except evitan que el programa se pare.
Un profesor guarda las puntuaciones de su clase en un archivo y una línea trae una letra donde debía ir un número. Hoy escribes el programa que sigue funcionando.
Al final de esta lección
Nota
Puedo leer y escribir archivos de texto y manejar un error con try y except.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Archivo de texto | un archivo cuyo contenido son líneas de letras y cifras | |
| with | abre un archivo y lo cierra al terminar el bloque | |
| Excepción | el error que para un programa cuando algo falla | ValueError |
| try y except | intenta algo y, si falla, ejecuta otro camino | |
| CSV | un archivo de texto con valores separados por comas | Ana,7 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
with open lee un archivo línea a línea
open("scores.csv") abre el archivo. Con with queda cerrado al salir del bloque, aunque haya un error dentro.
Un for sobre el archivo da una línea en cada vuelta. Cada línea acaba en un salto de línea, que se quita con strip().
Crea un archivo de puntuaciones en el laboratorio
Las órdenes siguientes van a la carpeta personal, crean un archivo scores.csv con tres líneas, lo muestran y lo leen con un guion de Python.
El archivo trae una línea mala a propósito: Luis,x.
Ve a tu carpeta personal
cdSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Crea el archivo de puntuaciones
printf 'Ana,7\nLuis,x\nMarta,9\n' > scores.csvSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el guion que lo lee
printf 'with open("scores.csv") as file:\n for line in file:\n print(line.strip())\n' > ~/leer.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta el guion
python3 ~/leer.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribir un archivo usa la letra w
Para escribir, abre el archivo con "w" como segundo valor: open("salida.txt", "w"). Si el archivo existía, se borra y empieza de cero.
Con file.write("texto") guardas el texto. Con "a" en lugar de "w" añades al final sin borrar.
Escribe el guion que crea un archivo
printf 'with open("salida.txt", "w") as file:\n file.write("Hola desde Python")\n' > ~/escribir.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo
python3 ~/escribir.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Mira lo que ha escrito
cat salida.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que abrir un archivo con "w" solo añade texto. Lo vacía antes de escribir. Si quieres conservar lo que había, abre con "a". Y haz una copia antes de probar con datos importantes.
try y except controlan un error
Si conviertes int("x"), Python lanza un ValueError y el programa se para. Con try pruebas el código arriesgado y con except dices qué hacer si falla.
Nombra el error que esperas, como except ValueError. Así no escondes por error otros fallos que sí quieres ver.
Provoca un ValueError a propósito
python3 -c "print(int('abc'))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Abre un archivo que no existe
python3 -c "open('no_existe.txt')"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe un guion con try y except
printf 'for text in ["7", "x", "9"]:\n try:\n print(int(text) * 2)\n except ValueError:\n print("no es un numero:", text)\n' > ~/probar.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo
python3 ~/probar.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Calcula una media saltando las líneas malas
# Las líneas de un archivo de puntuaciones, con un fallo.
lines = ["Ana,7\n", "Luis,x\n", "Marta,9\n"]
total = 0
valid = 0
for line in lines:
parts = line.strip().split(",")
try:
points = int(parts[1])
total = total + points
valid = valid + 1
except ValueError:
print("Línea con fallo:", line.strip())
print("Media de las líneas buenas:", total / valid)
# Cambia x por 4 y mira qué cambia.
Ejemplo resuelto: qué pasa con cada línea
| Línea | int de la segunda parte | Qué hace el programa |
|---|---|---|
| Ana,7 | 7 | Suma 7 y cuenta una línea buena |
| Luis,x | ValueError | Escribe el aviso y sigue con la siguiente |
| Marta,9 | 9 | Suma 9 y cuenta otra línea buena |
| Al final | total 16, valid 2 | La media es 16 / 2 = 8.0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.