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
withfö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 filger det öppnade filobjektet namnetfil.- 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
- Använd filen
anteckningar.txt. - Skriv
add_note(note)med läget"a". - Skriv
show_notes()med läget"r". - Lägg till minst två anteckningar.
- 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 ochread()läser text.withstänger filen automatiskt.