Presentationer Slide 1/1

Kap 4.1

Läsa och skriva till filer

Spara data så att den finns kvar efter att programmet har avslutats.

Mål

Efter lektionen ska du kunna...

  • skriva text till en fil
  • lägga till text utan att radera det gamla innehållet
  • läsa innehållet från en textfil
  • använda with för att stänga filer automatiskt

Problemet

Variabler är tillfälliga

name = "Anna"
score = 120

Värdena finns medan programmet körs.

När programmet avslutas försvinner de ur minnet.

Lösningen

En fil finns kvar

Programmet körs
name = "Anna"

Programmet skriver värdet till en fil.

namn.txt
Anna

Filen finns kvar efter att programmet har avslutats.

open()

Öppna filen i rätt läge

open("exempel.txt", "w")
  • "exempel.txt" är filens namn.
  • "w" är filläget.
  • Filläget bestämmer vad programmet får göra med filen.

Fillägen

w, a och r

"w"

write: skriv från början och ta bort gammalt innehåll.

"a"

append: lägg till sist i filen.

"r"

read: läs filen utan att skriva.

Skriva

Skriv med läget "w"

with open("exempel.txt", "w") as fil:
    fil.write("Hej filvärlden!\n")
    fil.write("Denna text skrivs till filen.")

write() skriver exakt texten som skickas in.

Läs koden

Vad betyder första raden?

with open("exempel.txt", "w") as fil:
  • open() öppnar eller skapar filen.
  • "w" öppnar den för skrivning.
  • as fil ger det öppnade filobjektet namnet fil.
  • Den indragna koden arbetar med filen.

Resultat

Vad innehåller filen?

Hej filvärlden!
Denna text skrivs till filen.

\n skapar radbrytningen efter den första texten.

write() lägger inte till radbrytningar automatiskt.

Varning

"w" skriver över filen

Före:
Gammal text
with open("exempel.txt", "w") as fil:
    fil.write("Ny text")
Efter:
Ny text

Lägga till

Använd "a" för append

with open("exempel.txt", "a") as fil:
    fil.write("\nEn ny rad läggs till.")

Det gamla innehållet ligger kvar.

Den nya texten läggs sist i filen.

Före och efter

Effekten av "a"

Före:
Hej filvärlden!
Denna text skrivs till filen.
Efter:
Hej filvärlden!
Denna text skrivs till filen.
En ny rad läggs till.

Läsa

Läs med läget "r"

with open("exempel.txt", "r") as fil:
    innehåll = fil.read()

print(innehåll)

read() läser hela filen som en sträng.

Strängen sparas i variabeln innehåll.

Viktigt

Filen måste finnas vid "r"

with open("saknas.txt", "r") as fil:
    innehåll = fil.read()

Om filen inte finns uppstår FileNotFoundError.

"w" och "a" kan däremot skapa filen.

with

Filen stängs automatiskt

with open("exempel.txt", "r") as fil:
    innehåll = fil.read()

# Här är filen stängd.

with stänger filen när blocket är färdigt.

Det sker även om ett fel uppstår inne i blocket.

Hela flödet

Skriv, lägg till och läs

with open("exempel.txt", "w") as fil:
    fil.write("Första raden\n")

with open("exempel.txt", "a") as fil:
    fil.write("Andra raden\n")

with open("exempel.txt", "r") as fil:
    innehåll = fil.read()

print(innehåll)
Första raden
Andra raden

Tillämpning

Spara ett recept

def spara_recept(namn, ingredienser):
    with open("recept.txt", "a") as fil:
        fil.write(f"Recept: {namn}\n")
        for ingrediens in ingredienser:
            fil.write(f"- {ingrediens}\n")

Varje nytt recept läggs sist i filen.

Informationen finns kvar nästa gång programmet körs.

Öva själv

Anteckningsprogram

  1. Använd filen anteckningar.txt.
  2. Skriv add_note(note) med läget "a".
  3. Skriv show_notes() med läget "r".
  4. Lägg till minst två anteckningar.
  5. Kör programmet igen och kontrollera att de finns kvar.

Sammanfattning

Kom ihåg

  • "w" skriver från början och raderar gammalt innehåll.
  • "a" lägger till sist i filen.
  • "r" läser från en befintlig fil.
  • write() skriver text och read() läser text.
  • with stänger filen automatiskt.