Lección 19 · 19 de 20
Escribir y leer archivos · Python
Guarde datos en un archivo de texto con Python y léalos de nuevo con open(), write() y read(): las puntuaciones de un juego.

open("scores.txt", "w") abre un archivo de la carpeta actual para escribir: si no existe lo crea y, si existe, lo vacía. with se encarga de cerrarlo al terminar el bloque, aunque haya un error. Dentro, file.write() escribe texto; el salto de línea \n hay que ponerlo a mano.
El modo "a" (*append*) abre el archivo para añadir al final sin borrar lo que había: así se suma la puntuación de Dani.
Sin modo, open() abre para leer. file.read() devuelve todo el contenido como una sola cadena. Como ya termina con \n, se escribe con end="" para no dejar una línea en blanco.
Para convertir el texto otra vez en datos, se recorre el archivo con for line in file:, una línea por vuelta. strip() quita el salto de línea, split(",") separa nombre y puntos, e int() convierte los puntos en número para compararlos y quedarse con el mejor.
Abrir para leer un archivo que no existe lanza FileNotFoundError, que se captura con try y except como en la lección anterior.
Código · main.py
players = [("Ana", 120), ("Ben", 95), ("Carla", 140)]# "w" creates the file (or empties it) to write in it.with open("scores.txt", "w") as file: for name, points in players: file.write(f"{name},{points}\n")# "a" adds at the end without deleting what was there.with open("scores.txt", "a") as file: file.write("Dani,110\n")# read() gives the whole file as one string.with open("scores.txt") as file: print(file.read(), end="")# Line by line, to turn the text back into data.best_name, best_points = "", 0with open("scores.txt") as file: for line in file: name, points = line.strip().split(",") if int(points) > best_points: best_name, best_points = name, int(points)print(f"Best player: {best_name} with {best_points} points")# Opening a file that does not exist raises an error.try: with open("missing.txt") as file: print(file.read())except FileNotFoundError: print("missing.txt does not exist yet")Salida · python3 main.py
Ana,120 Ben,95 Carla,140 Dani,110 Best player: Carla with 140 points missing.txt does not exist yet
Para recordar
with open(nombre, modo) as f:abre y cierra solo."w"escribe desde cero;"a"añade; sin modo, lee.write()no añade el salto de línea: ponga\n.read()da todo el texto;for line in f:va línea a línea.- Un archivo que no existe da
FileNotFoundError.
Ejercicio
Al final del programa, escriba un archivo ranking.txt con los jugadores ordenados de más a menos puntos (lea los datos, guárdelos en una lista de tuplas y ordénela).