DMarlon Studio

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.

Python · Escribir y leer archivos en DMarlon Studio: el código del ejemplo y su salida en la terminal

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