Repetition: Läsa och skriva textfiler

I Programmering 1 gick vi igenom hur man öppnar, läser och skriver till .txt-filer i Python. Vi använde till exempel:

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

Vad är JSON?

JSON står för JavaScript Object Notation och är ett format för att spara strukturerad data som text. Det är ett av de vanligaste formaten i modern programmering – särskilt när program behöver spara data till filer eller skicka/ta emot information över internet (t.ex. via API:er).


Varför använder vi JSON?

  • Det är enkelt att läsa – både för människor och datorer.
  • Det bygger på nyckel–värde-par, precis som en Python-dictionary.
  • Det fungerar i alla moderna programmeringsspråk (inte bara JavaScript).
  • Det används för att spara data i struktur, till exempel:
    • användare i ett system
    • inställningar i ett program
    • högsta poäng i ett spel

Hur ser JSON ut?

{
  "namn": "Sara",
  "ålder": 22,
  "favoritfärg": "blå",
  "intressen": ["musik", "programmering", "film"]
}

I det här exemplet:

  • "namn" är en nyckel, och "Sara" är dess värde
  • "intressen" är en lista (array)
  • Alla strängar är inom dubbla citattecken (enligt JSON-standard)

Skillnader mellan JSON och Python

JSONPython
{ "namn": "Sara" }{ "namn": "Sara" }
"true" och "false"True och False
nullNone
Endast dubbla citatteckenEnkel- eller dubbelcitat tillåtet

För att arbeta med JSON i Python använder vi modulen json. Den konverterar automatiskt mellan Python-objekt och JSON-text.

Arbeta med JSON i Python

För att använda JSON behöver vi importera modulen, vi importerar även os för att kolla filsökväg:

import json
import os

Spara data till en JSON-fil:

person = {"namn": "Ali", "ålder": 25}

filnamn = os.path.join(os.path.dirname(__file__), "person.json")

with open("filnamn", "w") as fil:
    json.dump(person, fil)

Det bästa för att se till att vi hittar rätt fil är att använda os-modulen som vi importerade. Att bara ange filnamnet kan göra att vi hittar fel för VSCode letar i arbetsmappen så arbetar vi i en undermapp så kommer den leta efter filen i arbetsmappen.

Spara variabler till JSON

När vi vill spara data från t.ex. input() till en JSON-fil behöver vi först lägga datan i en dictionary. JSON fungerar som ett strukturformat, och för att skriva till en JSON-fil i Python måste vi använda json.dump() med ett Python-objekt, t.ex. en dictionary eller lista.

Exempel:

import json
import os

name = input("Vad heter du? ")
age = int(input("Hur gammal är du? "))

# Lägg in variablerna i en dictionary
user = {
    "name": name,
    "age": age
}

filnamn = os.path.join(os.path.dirname(__file__), "user.json")

# Spara dictionaryn som JSON
with open("filnamn", "w") as file:
    json.dump(user, file)

Kom ihåg: json.dump() skriver till fil, men den förstår bara Python-objekt som går att översätta till JSON – t.ex. dictionaries, listor, strängar, heltal. Du kan inte skriva direkt från en variabel om den inte först har lagts in i rätt struktur.

Läsa data från JSON-fil:

with open("filnamn", "r") as fil:
    data = json.load(fil)
    print(data["namn"])  # → Ali

Vanliga användningsområden för JSON

  • Spara information mellan programkörningar (t.ex. användare, inställningar)
  • Skicka data mellan program (t.ex. via API:er)
  • Enklare databasalternativ för små mängder data

Vad är CSV?

CSV står för Comma-Separated Values och är ett enkelt format för att spara tabellformad data som text. Det används ofta för att exportera/importera data från till exempel Excel, Google Sheets, databaser eller andra program.

Varje rad i en CSV-fil motsvarar en post (rad), och varje värde separeras med kommatecken (eller ibland semikolon eller tabb, beroende på språk och inställningar).

Exempel på CSV-innehåll:

namn,klass,ålder
Ali,TE22,17
Sara,NA23,18
Liam,EE21,19

I det här exemplet:

  • Första raden är en rubrikrad (header) med kolumnnamn.
  • Varje rad efteråt är en data-post (en rad i tabellen).
  • Det går lätt att kopiera till/från kalkylprogram.

Varför använda CSV?

  • Det är enkelt att läsa och skriva som vanlig text.
  • Det är kompatibelt med många program – t.ex. Excel, databaser, statistikverktyg.
  • Perfekt när man jobbar med listor av objekt – t.ex. elevregister, produktlistor, bokningar.
  • Python har ett färdigt bibliotek som gör det lätt att hantera CSV-filer.

CSV i Python – grunderna

För att arbeta med CSV-filer i Python använder vi den inbyggda modulen csv:

import csv

Skriva till CSV-fil:

with open("elever.csv", "w", newline='') as fil:
    skrivare = csv.writer(fil)
    skrivare.writerow(["namn", "klass", "ålder"])
    skrivare.writerow(["Sven", "TE23", 17])
    skrivare.writerow(["Sara", "SB23", 18])
  • newline='' behövs för att undvika tomma rader i Windows.
  • writerow() skriver en rad i taget som en lista av värden.

Spara variabler till CSV

För att skriva data till en CSV-fil i Python behöver vi organisera datan i listor, eftersom CSV består av rader och kolumner.

Om du till exempel samlar in information via input() bör du:

  1. Lägga in värdena i en lista (en rad),
  2. Lägga till raden i en större lista om du har flera poster,
  3. Skriva raderna med csv.writer().

Exempel: Spara en elev med input:

import csv

name = input("Enter your name: ")
school_class = input("Enter your class: ")
age = int(input("Enter your age: "))

# Skapa en lista som representerar en rad i CSV
row = [name, school_class, age]

# Skriv raden till fil
with open("students.csv", "w", newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["name", "class", "age"])  # rubriker
    writer.writerow(row)  # enstaka rad

Exempel: Spara flera elever:

students = []

while True:
    name = input("Name: ")
    school_class = input("Class: ")
    age = int(input("Age: "))
    students.append([name, school_class, age])

    more = input("Add another? (y/n): ")
    if more.lower() != "y":
        break

with open("students.csv", "w", newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["name", "class", "age"])  # rubrikrad
    writer.writerows(students)  # skriver alla elever

Tips: CSV är tabellbaserat – varje rad du skriver ska vara en lista av värden. Om du har flera rader, använd writer.writerows() med en lista av listor.

Läsa CSV-fil:

with open("elever.csv", "r") as fil:
    read = csv.reader(fil)
    for rad in read:
        print(rad)
  • Varje rad blir en lista av strängar: ["Sven", "TE23", "17"]
  • All data som läses in från CSV blir strängar – konvertera själv om du behöver tal.

Exempel: Filtrera elever från TE23

with open("elever.csv", "r") as fil:
    read = csv.reader(fil)
    for rad in read:
        if rad[1] == "TE23":
            print(rad[0])  # Skriv ut namn

Vanliga problem & tips

  • CSV-filer använder komma som standard – men i Sverige används ofta semikolon i Excel. Då måste du läsa med rätt delimiter: csv.reader(fil, delimiter=";")
  • Alla värden är strängar – du måste konvertera manuellt om du behöver int, float osv.
  • Kontrollera att filen har rätt teckenkodning (t.ex. UTF-8) om svenska tecken ser konstiga ut.

När passar CSV bäst?

Använd CSV när du vill spara:

  • listor av liknande objekt (t.ex. elever, kunder, produkter)
  • data som kan visas i tabellform
  • något du vill kunna öppna i kalkylprogram

Om du istället har mer komplex data med inbäddade listor eller objekt (t.ex. användare med flera adresser), är JSON ett bättre val.

Jämförelse: .txt vs JSON vs CSV

TypFormatLämplig för
.txtVanlig textEnkel information, loggar
.jsonNyckel–värde-parStrukturerad data, objekt
.csvTabellformatListor av liknande objekt