Vad är en textfil?

En textfil är en fil som innehåller ren text – till exempel .txt, .csv, .json. Python kan läsa och skriva till sådana filer med hjälp av inbyggda funktioner.

Grunderna – open()

För att läsa eller skriva i en fil i Python använder vi funktionen open().

open(filnamn, läge)
LägesparameterVad den gör
'r'Read – läsa en fil (standardläge)
'w'Write – skriva till en fil (skriver över!)
'a'Append – lägga till i slutet av filen
'x'Skapa ny fil, kraschar om den finns
'b'Binary mode (för t.ex. bilder)

Exempel 1 – Läsa från en fil

fil = open("mintext.txt", "r")
content = fil.read()
print(content)
fil.close()

Förklaring:

  • Öppnar filen mintext.txt i läsläge ("r")
  • read() läser hela innehållet som en enda sträng
  • Viktigt att stänga filen med close()

Bättre sätt: with open()

Det är säkrare att använda with open() – då stängs filen automatiskt även om något går fel.

with open("mintext.txt", "r", encoding="utf-8") as fil:
    content = fil.read()
    print(content)

Notera att vi lägger till teckenkodningen utf-8 vilket möjliggör att vi kan spara andra tecken exempelvis å, ä och ö. Vi bör ha med det både när vi skriver och öppnar filen.

Exempel 2 – Läsa rad för rad

with open("mintext.txt", "r", encoding="utf-8") as fil:
    for rad in fil:
        print("Rad:", rad.strip())

strip() tar bort radbrytningar och mellanslag i början/slutet.

Exempel 3 – Skriva till en fil

with open("skrivfil.txt", "w", encoding="utf-8") as fil:
    fil.write("Hej världen!\n")
    fil.write("Detta är en ny rad.\n")

Viktigt: /n betyder radbrytning, lägger vi till det så kan vi skriva saker till filen på separata rader.

OBS: "w" skriver över allt i filen. Använd "a" för att lägga till istället:

with open("skrivfil.txt", "a", encoding="utf-8") as fil:
    fil.write("En ny rad till!\n")

Tips vid filhantering

  • Spara alltid textfiler i samma mapp som Python-filen när du är nybörjare.
  • Phyton skapar filerna om det inte finns med ’w’ (kommer skriva över filen) och ’a’ (lägger till i befintlig fil.
  • Kontrollera att filnamnet stämmer och har rätt ändelse (.txt)
  • Läs- och skrivläge skiljer sig – lägg märke till om du behöver 'r', 'w', eller 'a'
  • /n kan du lägga till för att få radbrytningar.

Vanliga funktioner

FunktionFörklaring
read()Läser hela filen som en sträng
readline()Läser nästa rad i filen
readlines()Returnerar en lista med alla rader
write(text)Skriver text till en fil
writelines(lista)Skriver flera rader från en lista

Läsa rader från en fil

När du läser text från en fil finns det flera sätt att göra det:

readline()

Läser nästa rad i filen varje gång du anropar funktionen.

with open("fil.txt", "r", encoding="utf-8") as file:
    rad1 = file.readline()
    rad2 = file.readline()

print(rad1)
print(rad2)

Du kan inte hoppa direkt till en viss rad – den läser i turordning från början till slut. Om du vill läsa tredje raden måste du först läsa första och andra.

readlines()

Läser alla rader i filen och returnerar dem som en lista av strängar.

with open("fil.txt", "r", encoding="utf-8") as file:
    rader = file.readlines()

print(rader[0])  # Första raden
print(rader[2])  # Tredje raden (index 2)

Alla metoder returnerar strängar även om det ser ut som tal. När vi läser från en fil kan vi behöva konvertera till float eller int om vi vill använda de för exempelvis beräkningar.

Exempel med konvertering och for-loop med readlines()

with open("temperatures.txt", "r", encoding="utf-8") as file:
    rader = file.readlines()

for rad in rader:
    temp = float(rad.strip())  # Tar bort radbrytning och konverterar
    print("Temperatur i Celsius:", temp)

Exempel 4 – Spara data från en lista till fil

namnlista = ["Ali\n", "Sara\n", "Liam\n"]

with open("namn.txt", "w", encoding="utf-8") as fil:
    fil.writelines(namnlista)

Ovan förutsätter att vi har /n för att få namnen på olika rader. Är inte listan formaterad så (vilket den oftast kanske inte är) måste vi redigera listan innan.

Exempel 5 – Lägga till radbrytning till listan

namn = ["Ali", "Sara", "Liam"]
with open("namn.txt", "w", encoding="utf-8") as fil:
    for person in namn:
        fil.write(person + "\n")

Förklaring: VI använder en for-loop och lägger till \n efter varje namn.
Vi kan också göra det utan en loop med join.

namn = ["Emma", "Sara", "Liam"]
with open("namn.txt", "w", encoding="utf-8") as fil:
    fil.write("\n".join(namn))