Vi skriver data til en fil

💡 Læringsmål: I dette kapittelet lærer du hvordan du skriver data til en fil.

Å skrive til fil ligner mye på å lese fra fil, men når vi åpner fila må vi bruke riktig modus, enten w (write) eller a (append). Forskjellen på dem er at når fila åpnes med w vil det eksisterende innholdet i fila slettes, mens a beholder innholdet, slik at nye ting som skrives legges til på slutten av fila. Og i stedet for å bruke read() for å lese fila, må vil bruke write() for å skrive.

with open("adresser.txt", "w", encoding="utf-8") as fil:
    fil.write("NRK, Bjørnstjerne Bjørnsons plass 1, 0340 Oslo\n")
    fil.write("Slottet, Slottsplassen 1, 0010 Oslo\n")

Koden over åpner fila adresser.txt i skrivemodus og skriver to linjer til fila. For å få tekst på ny linje må man legge inn linjeskrift selv med \n. Legg denne koden inn i programmet ditt og kjør programmet. Se at det opprettes en fil som heter adresser.txt og at denne fila inneholder to linjer, en for hver adresse.

✍️ Oppgave: Flere adresser

  1. Legg til en eller flere nye linjer med adresser, kjør programmet på nytt og se at adressene blir lagt til i fila.
  2. Eksperimentèr med å bytte modus fra w til a og kjør programmet. Hva skjer?

✍️ Oppgave: Skrive serietittel til fil

La oss gå tilbake til oppgaven vi gjorde i forrige kapittel da vi leste fra fil; å printe ut alle serietitlene fra serier.txt. Men i stedet for å skrive ut serietitlene til terminalen skal du nå istedet lagre de til en ny fil, for eksempel i en fil som heter titler.txt, med èn tittel per linje.

Som vanlig er det flere veier til mål. En mulighet er å først lese fra serier.txt og istedet for å skrive ut titlene, legge de i en liste. Deretter kan du i en ny with-blokk åpne fila du vil skrive til, gå gjennom lista, og for hvert element i lista skrive til fil. Et annet alternativ er å åpne begge filene samtidig, både den som skal leses fra og den som skal leses til, og for hver linje man leser fra seriefila skrive direkte til den andre fila med titler.

Det går an å åpne flere filer i samme with-blokk ved å ha komma mellom open-kallene. Legg merke til navnene på filvariablene som må være ulike, og man må ha kontroll på hvilken fil man leser fra og hvilken man skal skrive til.

with open("serier.txt", "r", encoding="utf-8") as seriefil,  open("titler.txt", "w", encoding="utf-8") as tittelfil: