C/C++ for Arduino, setup(), loop() og biblioteker.
Filhandtering og databehandling
I teknologi og forskingslære jobbar vi ofte med data som er lagra i filer – til dømes temperaturmålingar frå ein sensor, trafikkdata frå ein kommune, eller kjemiske analyseresultat. For å kunne analysere slike data med programmering, må vi kunne lese data frå filer og skrive resultat tilbake.
I dette kapittelet lærer du å:
- Opne, lese og skrive tekstfiler med Python
- Lese og behandle data i CSV-format (kommaseparerte verdiar)
- Bruke with-setninga for trygg filhandtering
- Gjere enkel databehandling som filtrering, utrekning og oppsummering
Filhandtering er ei sentral ferdigheit i all programmering – frå å lese inndata frå sensorar til å generere rapportar og eksportere resultat.
Funksjonen open() opnar ei fil i Python. Han tek to hovudargument: filnamnet og modusen (kva du vil gjere med fila).
fil = open("data.txt", "r") # Åpne for lesing (read)
fil = open("resultat.txt", "w") # Åpne for skriving (write) – overskriver!
fil = open("logg.txt", "a") # Åpne for tillegg (append)Viktige modusar:
| Modus | Tyding | Skildring |
|---|---|---|
"r" | Read | Les fila (standard) |
"w" | Write | Skriv til fila – slettar eksisterande innhald |
"a" | Append | Legg til på slutten av fila |
Best practice: Bruk alltid
with-setninga for å opne filer. Då blir fila lukka automatisk når du er ferdig, sjølv om det oppstår ein feil:with open("data.txt", "r") as fil:
innhold = fil.read()
print(innhold)
# Filen lukkes automatisk herUlike måtar å lese filer på
Python gir deg fleire metodar for å lese innhaldet i ei fil:
# Metode 1: Les hele filen som én streng
with open("data.txt", "r") as fil:
alt = fil.read()
print(alt)
# Metode 2: Les alle linjer som en liste
with open("data.txt", "r") as fil:
linjer = fil.readlines()
for linje in linjer:
print(linje.strip()) # strip() fjerner linjeskift
# Metode 3: Les linje for linje (mest minneeffektivt)
with open("data.txt", "r") as fil:
for linje in fil:
print(linje.strip())strip() fjernar mellomrom og linjeskift (\n) i starten og slutten av ein streng. Dette er viktig fordi kvar linje i ei fil vanlegvis endar med eit linjeskift-teikn.
Metode 3 er tilrådd for store filer, fordi han berre les éi linje om gongen i staden for å laste heile fila inn i minnet.
Tenk deg at vi har ei fil temperaturer.txt med éin temperaturverdi per linje:
18.3
21.7
19.5
23.1
17.8
22.0Vi kan lese desse verdiane og rekne ut gjennomsnittet:
temperaturer = []
with open("temperaturer.txt", "r") as fil:
for linje in fil:
verdi = float(linje.strip())
temperaturer.append(verdi)
antall = len(temperaturer)
gjennomsnitt = sum(temperaturer) / antall
print(f"Antall målinger: {antall}")
print(f"Gjennomsnitt: {gjennomsnitt:.1f} °C")
print(f"Høyeste: {max(temperaturer):.1f} °C")
print(f"Laveste: {min(temperaturer):.1f} °C")Utskrift:
Antall målinger: 6
Gjennomsnitt: 20.4 °C
Høyeste: 23.1 °C
Laveste: 17.8 °CLegg merke til at vi brukar float(linje.strip()) for å konvertere kvar linje frå tekst til desimaltal. Utan strip() ville linjeskift-teiknet forårsaka ein feil.
Kva gjer modusen "a" når du opnar ei fil med open("logg.txt", "a")?
Skrive til filer
For å lagre resultat brukar vi write() eller print() med file-parameteren:
# Metode 1: write() – skriver en streng
with open("resultat.txt", "w") as fil:
fil.write("Temperaturrapport\n")
fil.write("=================\n")
fil.write(f"Gjennomsnitt: {20.4:.1f} °C\n")
# Metode 2: print() med file-parameter
with open("resultat.txt", "w") as fil:
print("Temperaturrapport", file=fil)
print("=================", file=fil)
print(f"Gjennomsnitt: {20.4:.1f} °C", file=fil)Merk: Med write() må du leggje til linjeskift (\n) manuelt, medan print() legg det til automatisk.
Du kan òg skrive mange linjer på éin gong med writelines():
linjer = ["Linje 1\n", "Linje 2\n", "Linje 3\n"]
with open("output.txt", "w") as fil:
fil.writelines(linjer)Tips: Bruk "a"-modus (append) når du vil leggje til data i ei eksisterande fil utan å slette det som allereie er der – til dømes for å logge sensordata over tid.
Lat oss lese temperaturar frå ei fil, analysere dei, og skrive ein rapport til ei ny fil:
# Les data
temperaturer = []
with open("temperaturer.txt", "r") as fil:
for linje in fil:
temperaturer.append(float(linje.strip()))
# Analyser
gjennomsnitt = sum(temperaturer) / len(temperaturer)
frost = [t for t in temperaturer if t < 0]
# Skriv rapport
with open("rapport.txt", "w") as fil:
print("TEMPERATURRAPPORT", file=fil)
print("=" * 30, file=fil)
print(f"Antall målinger: {len(temperaturer)}", file=fil)
print(f"Gjennomsnitt: {gjennomsnitt:.1f} °C", file=fil)
print(f"Høyeste: {max(temperaturer):.1f} °C", file=fil)
print(f"Laveste: {min(temperaturer):.1f} °C", file=fil)
print(f"Frostdager: {len(frost)}", file=fil)
print("Rapport skrevet til rapport.txt")Programmet viser ein typisk arbeidsflyt: les data → analyser → skriv resultat. Dette mønsteret blir brukt i nesten all databehandling.
Kva skjer dersom du køyrer følgjande kode to gonger etter kvarandre?
with open("logg.txt", "w") as fil:
fil.write("Måling 1\n")Døme på ei CSV-fil (vær.csv):
dato,temperatur,nedbor,vind
2024-01-15,3.2,0.0,4.5
2024-01-16,-1.8,2.3,7.1
2024-01-17,0.5,0.0,3.2
2024-01-18,-3.1,5.7,8.9Første linje er ofte ei overskriftsrad (header) som skildrar kolonnane.
Python har ein innebygd csv-modul for å lese og skrive CSV-filer:
import csv
with open("vær.csv", "r") as fil:
leser = csv.reader(fil)
overskrift = next(leser) # Les første linje (header)
for rad in leser:
print(rad) # Hver rad er en liste med strengerViktig: Alle verdiar i ei CSV-fil blir lesne som strengar. Du må konvertere til rett datatype (f.eks. float() for desimaltal).
Behandle CSV-data
Når du les ei CSV-fil, er det vanleg å samle dataa i lister for vidare analyse:
import csv
datoer = []
temperaturer = []
nedbor = []
with open("vær.csv", "r") as fil:
leser = csv.reader(fil)
next(leser) # Hopp over overskriften
for rad in leser:
datoer.append(rad[0])
temperaturer.append(float(rad[1]))
nedbor.append(float(rad[2]))
# Nå kan vi analysere dataene
print(f"Antall dager: {len(datoer)}")
print(f"Snitttemperatur: {sum(temperaturer) / len(temperaturer):.1f} °C")
print(f"Total nedbør: {sum(nedbor):.1f} mm")Du kan òg skrive CSV-filer:
import csv
data = [
["Stoff", "Masse (g)", "Volum (mL)"],
["Vann", 100.0, 100.0],
["Etanol", 78.9, 100.0],
["Kvikksølv", 1360.0, 100.0],
]
with open("tetthet.csv", "w", newline="") as fil:
skriver = csv.writer(fil)
skriver.writerows(data)Parameteren newline="" hindrar tomme linjer mellom radene på Windows.
Her er eit komplett program som les vêrdata frå ei CSV-fil og lagar ei oppsummering:
import csv
# Les data fra CSV-filen
datoer = []
temperaturer = []
nedbor = []
with open("vær.csv", "r") as fil:
leser = csv.reader(fil)
next(leser) # Hopp over overskrift
for rad in leser:
datoer.append(rad[0])
temperaturer.append(float(rad[1]))
nedbor.append(float(rad[2]))
# Beregn statistikk
snitt_temp = sum(temperaturer) / len(temperaturer)
total_nedbor = sum(nedbor)
frostdager = [d for d, t in zip(datoer, temperaturer) if t < 0]
torrdag = sum(1 for n in nedbor if n == 0)
# Skriv ut rapport
print("VÆRRAPPORT")
print("=" * 40)
print(f"Periode: {datoer[0]} til {datoer[-1]}")
print(f"Antall dager: {len(datoer)}")
print(f"Snitttemperatur: {snitt_temp:6.1f} °C")
print(f"Høyeste temp.: {max(temperaturer):6.1f} °C")
print(f"Laveste temp.: {min(temperaturer):6.1f} °C")
print(f"Total nedbør: {total_nedbor:6.1f} mm")
print(f"Tørre dager: {torrdag:6d}")
print(f"Frostdager: {len(frostdager):6d}")Programmet viser heile flyten: lese CSV, sortere data i separate lister, rekne ut statistikk med innebygde funksjonar og list comprehension, og presentere resultata i ein ryddig rapport.
Skriv eit Python-program som les ei tekstfil med namn tall.txt der kvar linje inneheld eitt heiltal. Programmet skal skrive ut summen av alle tala, gjennomsnittet og det største talet.
Oppsummering
I dette kapittelet har du lært å:
- Opne filer med open() i modusane "r" (les), "w" (skriv) og "a" (legg til)
- Bruke with-setninga for trygg filhandtering der fila blir lukka automatisk
- Lese filer med read(), readlines() eller linje for linje i ei for-løkke
- Skrive til filer med write() og print(file=...)
- Lese og skrive CSV-filer med csv.reader() og csv.writer()
- Utføre enkel databehandling: samle data i lister, rekne ut statistikk og filtrere
Viktige prinsipp:
- Bruk alltid with for å handtere filer – det er tryggare og ryddigare
- Hugs at CSV-verdiar blir lesne som strengar – konverter med int() eller float()
- Modusane "w" og "a" har ulik åtferd: "w" overskriv, "a" legg til
Filhandtering og databehandling er kjernen i mykje av det vi gjer i teknologi og forskingslære – frå å lese sensordata til å analysere forsøksresultat.
Skriv eit program som les ei CSV-fil elever.csv med kolonnane navn,norsk,matte,engelsk. Programmet skal: a) Rekne ut gjennomsnittskarakteren for kvar elev. b) Skrive ut ein tabell med namn og gjennomsnitt. c) Finne eleven med høgast gjennomsnitt.
Skriv eit program som fungerer som ein enkel datalogger. Programmet skal: a) Be brukaren skrive inn temperaturmålingar (avslutt med «ferdig»). b) Lagre alle målingane i ei fil malinger.txt med tidsstempel. c) Rekne ut og vise statistikk (tal, gjennomsnitt, min, maks). d) Lagre statistikken i ei eiga fil statistikk.txt.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.