Filer och strukturerad data – JSON och CSV
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
| JSON | Python |
|---|---|
{ "namn": "Sara" } | { "namn": "Sara" } |
"true" och "false" | True och False |
null | None |
| Endast dubbla citattecken | Enkel- 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 osSpara 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"]) # → AliVanliga 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,19I 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 csvSkriva 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:
- Lägga in värdena i en lista (en rad),
- Lägga till raden i en större lista om du har flera poster,
- 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 radExempel: 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 eleverTips: 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
radblir 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 namnVanliga 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,floatosv. - 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
| Typ | Format | Lämplig för |
|---|---|---|
| .txt | Vanlig text | Enkel information, loggar |
| .json | Nyckel–värde-par | Strukturerad data, objekt |
| .csv | Tabellformat | Listor av liknande objekt |