Programmering nivå 2

Kap 4.1 – Läsa och skriva till filer

Arbeta med filer och filformat.

Mål med lektionen

När du har arbetat klart med denna lektion ska du:

  • Kunna läsa och skriva data till textfiler med Python.
  • Förstå skillnaden mellan att skriva över, lägga till och läsa från en fil.
  • Använda filhantering för att spara programdata permanent.

Så här lär du dig bäst

Du lär dig bäst genom att följa konkreta exempel och själv skriva kod som öppnar, läser och sparar information. Arbeta stegvis och prova olika lägen för att se hur filinnehållet förändras. Testa gärna att koppla filhantering till ett tidigare projekt, som att spara en lista med recept eller spelresultat.

Centrala begrepp

  • filhantering - Teknik för att läsa och skriva data från filer.
  • open() - Funktion för att öppna en fil i olika lägen.
  • read() och write() - Metoder för att läsa och skriva text i filer.
  • fillägena r, w och a - Lägen för att läsa, skriva över eller lägga till innehåll.
  • with - Konstruktion för att säkert arbeta med filer.

Innehåll och exempel

Vad händer när ett program skriver till en fil?

Vanliga variabler finns bara medan programmet körs. Om du sparar ett namn i en variabel och avslutar programmet försvinner värdet. En fil kan däremot ligga kvar på datorn efter att programmet har avslutats. Därför används filer när program behöver spara data mellan körningar.

Funktionen open() öppnar en fil. Det andra argumentet bestämmer vad programmet får göra med filen:

  • "w" betyder write. Filen skrivs från början och gammalt innehåll tas bort.
  • "a" betyder append. Ny text läggs till sist i filen.
  • "r" betyder read. Programmet läser filen utan att skriva ny text.

with används för att Python automatiskt ska stänga filen när blocket är klart. Det är säkrare än att öppna och stänga filen manuellt, särskilt om ett fel skulle uppstå mitt i koden.

Skriva till fil

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

Läget w betyder att filen skrivs över om den redan finns. fil.write(...) skriver exakt den text du skickar in. Vill du ha radbrytning behöver texten innehålla \n.

Lägga till i fil

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

Läget a står för append - lägger till utan att ta bort tidigare innehåll.

Läsa från fil

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

print(innehåll)

Läget r står för read - läser innehållet som en hel sträng.

Interaktiv övning: simulera skrivning till fil

Testa hur filen förändras när du använder "w", "a" och "r". Övningen skriver inte till en riktig fil på datorn, utan visar hur innehållet i exempel.txt skulle ändras.

Filen exempel.txt är tom.

Programmering 2-koppling: läget "w" ersätter filens innehåll, "a" lägger till i slutet och "r" läser det som redan finns.

Öva - tillämpning i ett projekt

Koppla filhantering till något du byggt tidigare, till exempel:

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

Testa sedan att läsa filen:

with open("recept.txt", "r") as fil:
    print(fil.read())

Öva själv

Övning 1: Skriv en hälsning till en fil

Öppna halsning.txt med läget "w" och skriv två textrader. Öppna sedan filen med "r" och skriv ut innehållet.

Fundera: Vad händer med gammalt innehåll när "w" används?

När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.

Övning 2: Lägg till i en loggbok

Skapa funktionen add_log(message) som öppnar loggbok.txt med läget "a" och lägger till meddelandet på en ny rad. Anropa funktionen minst tre gånger.

Fundera: Varför behövs \n?

När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.

Övning 3: Läs upp en textfil

Skapa funktionen show_file(filename). Funktionen ska öppna det angivna filnamnet med "r", läsa hela innehållet med read() och skriva ut det.

Fundera: Vilken datatyp returnerar read()?

När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.

Övning 4: Spara en namnlista

Skriv funktionen save_names(names) som använder en loop och läget "w" för att spara varje namn på en egen rad i namn.txt. Läs därefter filen och skriv ut innehållet.

Fundera: Vad är fördelen med att funktionen tar emot en lista?

När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.

Övning 5: Meny för anteckningar

Svårare övning: Här kombinerar du filhantering med funktioner, meny och loopar.

Bygg ett menyprogram med alternativen 1. Lägg till anteckning, 2. Visa anteckningar, 3. Töm filen och 4. Avsluta. Använd "a", "r" och "w" i separata funktioner.

Fundera: Vilket filläge ska användas för varje menyval?

När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.

Övning 6: Spara spelresultat

Svårare övning: Här kombinerar du filer med objekt, listor, loopar och funktioner.

Skapa klassen Result med namn och poäng. Skapa flera objekt i en lista. Skriv en funktion som sparar resultaten i resultat.txt, en rad per objekt, och en funktion som läser och visar hela filen. Lägg därefter till ett nytt resultat med "a".

Fundera: Vilken information måste omvandlas till text innan den skrivs?

När du har försökt själv: visa lösningsförslaget till övning 6 på GitHub.

Sammanfattning

  • Du kan nu öppna, läsa från och skriva till textfiler.
  • Du förstår skillnaden mellan skrivlägen (w, a, r).
  • Du kan använda filhantering för att spara programdata på ett enkelt sätt.

Tillbaka till Kapitel 4