Podcast Praktisk Python – Din Lydguide til Python Programmering 4 - itnett/FTD02H-N GitHub Wiki
Kapittel 13: Filer og databaser 📂🗃️
I denne delen skal vi dykke dypere inn i hvordan vi kan lese fra og skrive til filer i Python. Dette er en veldig viktig ferdighet fordi det lar oss lagre informasjon mellom programkjøringer og jobbe med store mengder data. Videre vil vi se på grunnleggende databaser, som er et sentralt verktøy for å håndtere strukturerte data effektivt.
1. Å åpne og lese fra filer 📖
Python gjør det enkelt å lese fra filer med innebygd støtte for filoperasjoner. Den vanligste måten å åpne en fil på er med funksjonen open()
.
Eksempel:
# Åpner en tekstfil i lesemodus ('r')
with open("min_fil.txt", "r") as fil:
innhold = fil.read()
print(innhold)
🎙️ Syntaks forklaring:
with
brukes for å sikre at filen lukkes riktig når vi er ferdige med å bruke den."min_fil.txt"
er navnet på filen vi vil åpne."r"
betyr at vi åpner filen i lesemodus.fil.read()
leser hele filens innhold som en streng.
2. Å skrive til filer ✍️
Vi kan også skrive til filer i Python. Dette gjøres på samme måte som lesing, men vi endrer modus til 'w'
(skrivemodus).
Eksempel:
# Skriver til en fil
with open("min_fil.txt", "w") as fil:
fil.write("Hei, verden!\n")
🎙️ Forklaring:
'w'
betyr at vi åpner filen i skrivemodus. Hvis filen allerede eksisterer, overskriver vi den. Hvis filen ikke eksisterer, blir den laget.fil.write()
skriver teksten til filen.
📝 Merk: Hvis du vil legge til tekst i en eksisterende fil uten å overskrive den, bruker du 'a'
(append-modus).
3. Å jobbe med linjer i filer 📝
Ofte ønsker vi å lese eller skrive filer linje for linje. Dette er spesielt nyttig når vi jobber med store filer som ikke kan leses inn i minnet på én gang.
Eksempel: Lesing linje for linje
# Leser fil linje for linje
with open("min_fil.txt", "r") as fil:
for linje i fil:
print(linje.strip()) # fjerner ekstra mellomrom og linjeskift
🎙️ Forklaring:
for linje i fil:
går gjennom filen linje for linje.strip()
fjerner eventuelle ekstra mellomrom eller linjeskift fra slutten av hver linje.
4. Skrive lister til filer 📋➡️📂
Noen ganger vil vi lagre lister til filer. Dette kan gjøres ved å bruke en løkke til å skrive hvert element i listen til filen.
Eksempel:
frukter = ["eple", "banan", "appelsin"]
with open("frukt_fil.txt", "w") as fil:
for frukt in frukter:
fil.write(frukt + "\n")
🎙️ Forklaring:
- Vi bruker en for-løkke til å skrive hver frukt til en ny linje i filen.
5. Å lese filer med feilhåndtering ⚠️
Når vi jobber med filer, kan det oppstå feil – for eksempel hvis filen ikke eksisterer eller ikke kan åpnes. Dette kan vi håndtere ved å bruke try-except.
Eksempel:
try:
with open("ikke_eksisterende_fil.txt", "r") as fil:
innhold = fil.read()
except FileNotFoundError:
print("Filen finnes ikke!")
🎙️ Forklaring:
- try-except-blokken fanger opp feilen FileNotFoundError hvis filen ikke finnes, og skriver ut en passende melding.
6. Bruke JSON for strukturert data 🗂️
Hvis vi ønsker å lagre data i et format som kan leses og brukes av andre programmer, er JSON (JavaScript Object Notation) et populært valg. Python har en innebygd modul for å jobbe med JSON.
Eksempel: Skrive JSON-data
import json
data = {"navn": "Ola", "alder": 25}
with open("data.json", "w") as fil:
json.dump(data, fil)
🎙️ Forklaring:
- json.dump() tar en Python-ordbok og lagrer den som JSON i en fil.
- JSON-formatet er mye brukt i webutvikling og API-kommunikasjon fordi det er lett for både mennesker og maskiner å lese.
7. Bruke CSV-filer 📑
CSV-filer (Comma-Separated Values) er et vanlig filformat for å lagre tabellstrukturert data.
Eksempel: Lese CSV-filer
import csv
with open("data.csv", "r") as fil:
csv_reader = csv.reader(fil)
for rad in csv_reader:
print(rad)
🎙️ Forklaring:
- Vi bruker csv.reader for å lese data fra en CSV-fil.
- Hver rad blir returnert som en liste, hvor hvert element er en kolonne i tabellen.
8. Introduksjon til databaser 🗃️
En database er en strukturert måte å lagre data på. I Python kan vi bruke SQLite, som er en innebygd database-motor. Vi starter med å opprette en enkel database og tabell.
Eksempel: Opprette en database og tabell
import sqlite3
# Koble til en database (eller opprett en hvis den ikke finnes)
conn = sqlite3.connect("min_database.db")
c = conn.cursor()
# Opprett en tabell
c.execute('''CREATE TABLE personer (navn TEXT, alder INTEGER)''')
# Legg til data
c.execute("INSERT INTO personer (navn, alder) VALUES ('Ola', 25)")
# Lagre endringer
conn.commit()
# Lukk tilkoblingen
conn.close()
🎙️ Forklaring:
- sqlite3.connect() oppretter (eller åpner) en SQLite-database.
- CREATE TABLE lager en tabell med kolonnene navn og alder.
- Vi bruker INSERT INTO for å legge til data, og commit() for å lagre endringene.
9. Oppsummering 🎯
Vi har nå gått gjennom hvordan vi kan arbeide med filer i Python – alt fra å lese og skrive tekstfiler, til mer avanserte formater som JSON og CSV. Vi har også introdusert hvordan man kan jobbe med databaser ved hjelp av SQLite.
I neste episode skal vi dykke dypere inn i objektorientert programmering (OOP), som gir oss en kraftigere måte å strukturere programmene våre på.
Hold fokus, fortsett å øve, og husk: Python er et verktøy som blir sterkere jo mer du bruker det! 🎉
Kapittel 14: Klasser og funksjoner 🧰📦
I dette kapittelet skal vi gå dypere inn i klasser og funksjoner i Python. Klasser er en av grunnsteinene i objektorientert programmering (OOP). De lar oss lage maler for objekter – strukturer som inneholder både data og funksjoner. Funksjoner, på den annen side, lar oss organisere koden vår i små, gjenbrukbare enheter.
1. Hva er en klasse? 👨🏫
En klasse er en mal, eller en oppskrift, for å lage objekter. Et objekt er en forekomst av en klasse. Hvis vi ser for oss en klasse som en blåkopi, vil objektene være bygninger som er laget fra denne blåkopien.
Eksempel:
# Definerer en klasse kalt Bil
class Bil:
def __init__(self, merke, modell, år):
self.merke = merke
self.modell = modell
self.år = år
def beskrivelse(self):
return f"{self.merke} {self.modell} ({self.år})"
# Opprette et objekt av klassen Bil
min_bil = Bil("Toyota", "Corolla", 2020)
# Bruker en metode i objektet
print(min_bil.beskrivelse())
🎙️ Forklaring:
class Bil:
– Dette er hvordan vi definerer en klasse. Klassen heterBil
.__init__
er en spesiell metode som kalles når et nytt objekt opprettes. Den initialiserer objektet med verdier for merke, modell, og år.- self refererer til det spesifikke objektet av klassen.
min_bil
er et objekt av klassen Bil med egenskapene Toyota, Corolla, og 2020.- Metoden beskrivelse() returnerer en streng med informasjon om bilen.
2. Funksjoner i klasser 🔄
Funksjoner i klasser kalles ofte for metoder. En metode fungerer som en funksjon, men den hører til et objekt.
Eksempel:
class Sirkel:
def __init__(self, radius):
self.radius = radius
def areal(self):
return 3.14 * self.radius ** 2
# Opprette et Sirkel-objekt
min_sirkel = Sirkel(5)
# Bruke metoden areal()
print(f"Arealet av sirkelen er: {min_sirkel.areal()}")
🎙️ Forklaring:
- Her har vi laget en klasse kalt Sirkel med en metode areal() som regner ut arealet til en sirkel.
- Når vi kaller min_sirkel.areal(), vil Python bruke radiusen vi definerte (5) for å beregne arealet.
3. Bruk av flere metoder 🚗🛠️
Vi kan legge til flere metoder i en klasse for å utvide funksjonaliteten til objektene våre.
Eksempel:
class Bil:
def __init__(self, merke, modell, år):
self.merke = merke
self.modell = modell
self.år = år
self.hastighet = 0 # Startverdi
def beskrivelse(self):
return f"{self.merke} {self.modell} ({self.år})"
def akselerer(self, økning):
self.hastighet += økning
print(f"Øker hastigheten med {økning}. Nåværende hastighet: {self.hastighet} km/t.")
def brems(self, reduksjon):
self.hastighet -= reduksjon
print(f"Reduserer hastigheten med {reduksjon}. Nåværende hastighet: {self.hastighet} km/t.")
# Opprette et objekt av Bil-klassen
min_bil = Bil("Tesla", "Model S", 2021)
# Kalle metoder på objektet
min_bil.beskrivelse()
min_bil.akselerer(30)
min_bil.brems(10)
🎙️ Forklaring:
- Vi har utvidet klassen Bil med metoder for å akselerere og bremse.
- Disse metodene manipulerer bilens hastighet ved å legge til eller trekke fra en verdi.
4. Arv i klasser 👨👦
I OOP kan vi lage nye klasser som arver egenskaper og metoder fra andre klasser. Dette er en kraftig funksjon som lar oss gjenbruke kode på en effektiv måte.
Eksempel:
# En superklasse Bil
class Bil:
def __init__(self, merke, modell, år):
self.merke = merke
self.modell = modell
self.år = år
def beskrivelse(self):
return f"{self.merke} {self.modell} ({self.år})"
# En subklasse Elbil som arver fra Bil
class Elbil(Bil):
def __init__(self, merke, modell, år, batterikapasitet):
super().__init__(merke, modell, år) # Arver fra Bil-klassen
self.batterikapasitet = batterikapasitet
def lad(self):
print(f"Lader {self.batterikapasitet}-kWh batteriet.")
# Opprette et objekt av Elbil-klassen
min_elbil = Elbil("Tesla", "Model 3", 2021, 75)
# Bruke metoder fra både superklasse og subklasse
print(min_elbil.beskrivelse()) # Arvet fra Bil-klassen
min_elbil.lad() # Definert i Elbil-klassen
🎙️ Forklaring:
- Elbil er en underklasse som arver fra Bil.
- Vi bruker super()-funksjonen for å hente variabler og metoder fra superklassen.
- Vi har lagt til en ny metode lad() som er spesifikk for Elbil.
5. Å bruke klasser for datastrukturer 🗃️
Klasser kan også brukes til å lage dine egne datastrukturer, som er spesialtilpasset ditt behov.
Eksempel: Lage en stabel (stack)
class Stabel:
def __init__(self):
self.elementer = []
def legg_til(self, element):
self.elementer.append(element)
def fjern(self):
return self.elementer.pop()
def er_tom(self):
return len(self.elementer) == 0
# Opprette et Stabel-objekt
min_stabel = Stabel()
# Legge til elementer i stabelen
min_stabel.legg_til(1)
min_stabel.legg_til(2)
min_stabel.legg_til(3)
# Fjerne det øverste elementet
print(min_stabel.fjern()) # 3
# Sjekke om stabelen er tom
print(min_stabel.er_tom()) # False
🎙️ Forklaring:
- Vi har laget en enkel klasse Stabel, som lar oss legge til og fjerne elementer på en måte som ligner en tradisjonell stack-datastruktur.
- Funksjoner som legg_til(), fjern(), og er_tom() gjør det enkelt å manipulere stabelen.
6. Kombinere klasser og funksjoner ⚙️
Vi kan kombinere klasser og funksjoner for å lage komplekse systemer. For eksempel kan vi lage et system som håndterer forskjellige kjøretøy ved å bruke klasser for hver type kjøretøy og funksjoner som jobber med objektene.
Eksempel:
class Kjøretøy:
def __init__(self, merke, hastighet):
self.merke = merke
self.hastighet = hastighet
def kjør(self):
print(f"{self.merke} kjører i {self.hastighet} km/t.")
def kjør_flere_kjøretøy(kjøretøy_liste):
for kjøretøy i kjøretøy_liste:
kjøretøy.kjør()
# Opprette kjøretøyobjekter
bil = Kjøretøy("Toyota", 60)
sykkel = Kjøretøy("BMX", 20)
# Bruke funksjonen til å kjøre flere kjøretøy
kjøretøy_liste = [bil, sykkel]
kjør_flere_kjøretøy(kjøretøy_liste)
🎙️ Forklaring:
- Vi har laget en funksjon kjør_flere_kjøretøy() som tar en liste med kjøretøyobjekter og kaller metoden kjør() for hvert objekt.
- Dette er et godt eksempel på hvordan funksjoner og klasser kan samarbeide for å
lage mer komplekse systemer.
7. Oppsummering 📝
I dette kapittelet har vi utforsket:
- Hva en klasse er, og hvordan den kan brukes til å lage objekter.
- Hvordan vi kan legge til funksjoner (metoder) i klasser for å definere oppførsel.
- Arv, som lar oss lage nye klasser basert på eksisterende klasser.
- Hvordan vi kan bruke klasser til å lage våre egne datastrukturer.
I neste kapittel skal vi se på klasser og objekter i dypere detalj, inkludert hvordan vi kan jobbe med mer avanserte konsepter som arv og komposisjon.
🎉 Fortsett å øve, prøv deg frem med klasser og funksjoner, og husk – læring skjer gjennom praksis!