C/C++ for Arduino, setup(), loop() og biblioteker.
Data som overlever
Så langt har dataene i programmene dine forsvunnet i det øyeblikket programmet ble avsluttet. Men i forskning vil vi ofte beholde dem -- temperaturmålinger fra en sensor, trafikkdata fra en kommune, analyseresultater fra et forsøk. Slike data lagres i filer, og for å analysere dem må vi kunne både lese fra filer og skrive tilbake.
I dette kapittelet lærer du å åpne, lese og skrive tekstfiler med Python, å behandle data i CSV-format, og å bruke with-setningen for trygg filhåndtering. Filhåndtering er en grunnferdighet i all programmering -- fra å hente sensordata til å generere rapporter.
Å åpne og lese en fil
Vi åpner en fil i Python med funksjonen open(), som tar to argumenter: filnavnet og modusen. De tre viktigste modusene er "r" for å lese (read), "w" for å skrive (write) -- som sletter alt eksisterende innhold -- og "a" for å legge til på slutten (append). Det er en viktig forskjell: "w" overskriver, mens "a" beholder det som allerede er der, noe som er nyttig når du vil logge data over tid.
Den anbefalte måten å åpne filer på er med en with-setning: with open("data.txt", "r") as fil:. Fordelen er at filen lukkes automatisk når du er ferdig, selv om det skulle oppstå en feil. Det er tryggere og ryddigere enn å lukke filen manuelt.
Det finnes flere måter å lese på. read() gir hele innholdet som én streng, readlines() gir alle linjene som en liste, og den mest minneeffektive er å løkke direkte over filen, linje for linje, som er best for store filer. Når du leser linjer, må du nesten alltid bruke strip() -- den fjerner mellomrom og linjeskift i begynnelsen og slutten. Tenk deg en fil med én temperatur per linje: du kan løkke over filen, kjøre float(linje.strip()) for å gjøre hver linje om til et tall, og legge dem i en liste. Uten strip() ville det skjulte linjeskiftet skapt en feil. Når listen er full, regner du snitt med sum() og len(), og finner ytterpunktene med max() og min().
Å skrive resultater tilbake
Når vi har analysert data, vil vi gjerne lagre resultatene. Til det har vi to metoder. Den ene er write(), som skriver en streng -- men da må du legge til linjeskiftet \n selv. Den andre er print() med en ekstra file-parameter, som i print("Tekst", file=fil), og her legges linjeskiftet til automatisk. Vil du skrive mange linjer på en gang, finnes også writelines().
Husk forskjellen på modusene her. Åpner du en fil med "w" og kjører programmet to ganger, vil filen bare inneholde resultatet fra den siste kjøringen, fordi "w" sletter alt hver gang. Vil du beholde gammelt innhold og legge til nytt -- som når du logger sensordata over tid -- må du bruke "a".
Det typiske mønsteret i all databehandling er enkelt og gjenkjennelig: les data, analyser, skriv resultater. Du kan for eksempel lese temperaturer fra en fil, regne ut gjennomsnittet og telle frostdager med en list comprehension, og deretter skrive en pen rapport til en ny fil med en serie print(..., file=fil)-kall. Filen din inneholder nå en ferdig analyse du kan dele eller lese senere -- et lite, men komplett databehandlingsprogram.
CSV: tabeller i tekst
Mye virkelig data ligger i tabeller, og det vanligste formatet for slike er CSV -- Comma-Separated Values. Hver linje er en rad, og verdiene skilles med komma (eller semikolon i norske filer). Ofte er den første linjen en overskriftsrad som forteller hva kolonnene betyr. En værfil kan for eksempel ha kolonnene dato, temperatur, nedbør og vind.
Python har en innebygd csv-modul som gjør jobben enkel. Du importerer den med import csv, åpner filen med with, og bruker csv.reader(fil). Med next(leser) hopper du over overskriftsraden, og deretter løkker du over radene -- der hver rad kommer som en liste av strenger. Akkurat dette siste er viktig å huske: alle verdier i en CSV-fil leses som strenger, også tallene. Vil du regne med dem, må du konvertere med float() eller int().
En vanlig arbeidsform er å fordele kolonnene i hver sin liste. Du leser radene og legger rad[0] i en datoliste, float(rad[1]) i en temperaturliste, og så videre. Da har du dataene klare til analyse: regn snitttemperatur med sum() og len(), summer nedbøren, og bruk list comprehension til å finne frostdager. Du kan også skrive CSV-filer med csv.writer() og writerows() -- husk parameteren newline="" for å unngå tomme linjer på Windows. Med CSV-modulen kan du dermed lese inn et helt værdatasett, analysere det og skrive ut en ryddig rapport, alt i samme program.
Oppsummering
Vi har sett at filer åpnes med open() i modusene "r" (les), "w" (skriv, sletter) og "a" (legg til), og at with-setningen sørger for at filen lukkes trygt. Vi leste filer med read(), readlines() eller linje for linje, og husket alltid strip() for å fjerne linjeskift.
Vi skrev resultater med write() og print(..., file=fil), og så at det typiske mønsteret er les, analyser, skriv. Til slutt brukte vi csv-modulen til å lese tabelldata, der alle verdier kommer som strenger og må konverteres. Filhåndtering og databehandling er kjernen i mye av arbeidet i teknologi og forskningslære -- fra sensordata til ferdige rapporter.
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.