Manipulation af filer i Python

 

Det er muligt at manipulere med filer på computeren ved hjælp af Python. Blandt andet er det muligt at tilføje, slette og opdatere indhold i filer, samt at hente indhold fra filer ned i programmet til benyttelse.

På denne side vil filen “Storbyer.txt” blive benyttet i alle eksempler. Filen er en tekstfil som ser sådan her ud:

Tekstfil med storbyer

 

Filernes opbygning

En fil består af tre dele: filstien, filnavnet og filformatet. Nedenstående er et eksempel på en tilfældig fil i Windows-styresystemet:

C:\Users\olive\Documents\Downloads\filnavn.docx

Hvor den er delt op i følgende:

  • Filstien er markeret med rød
  • Filnavnet er markeret med blå
  • Filformatet er markeret med grøn

Filstien starter med navnet C: som er rodmappen, altså, den mappe på computeren som indeholder alle andre mapper. På Mac- og Linux-styresystem hedder rodmappen /. Efter rodmappen følger navnet på undermapper som er inde i den tidligere mappe. Dvs. at Users er inde i C:, olive er inde i Users, Documents er inde i olive og Downloads er inde i Documents. Disse mapper er alle adskilt af en omvendt skråstreg (\). På Mac- og Linux-styresystem er det en normal skråstreg (/).

Efter filstien kommer filnavnet, som er det navn filen er givet.

Efter filnavnet kommer filformatet, som er filens format. F.eks. betyder .docx at det er en Word-fil og .pdf betyder at det er en PDF-fil.

 

Current working Directory

Current Working Directory (på dansk: den nuværende arbejdsmappe) er den mappe som bliver arbejdet i på nuværende tidspunkt. Hvert enkelt program på computeren arbejder med en bestemt mappe, som betragtes som programmets nuværende arbejdsmappe.

Det er vigtigt at skelne mellem en absolut og en relativ filsti når man arbejder med filer i Python:

  • En absolut filsti begynder altid med rodmappen og består af den fulde filsti (f.eks. C:\Users\olive\Documents\Downloads\filnavn.docx)
  • En relativ filsti begynder fra den nuværende arbejdsmappe (f.eks. .\Downloads\filnavn.docx)

En relativ filsti kan starte med enten et enktelt punktum (.) eller dobbeltpunktum (..).

  • Et enkelt punktum (.) er et kort udtryk for den nuværende arbejdsmappe
  • Dobbeltpunktum (..) er et kort udtryk for forældermappen (dvs. mappen som et et niveau over den nuværende mappe)

 

Åbn fil

For at arbejde med en fil i Python skal man først åbne den i programmet med funktionen open() som har to parametre: filnavn og tilstand.

  • Filnavnet er navnet på filen som skal åbnes.
  • Tilstanden er den tilstand som filen skal åbnes i.

Tilstanden kan have følgende værdier:

 

Derudover kan der tilføjes endnu en værdi sammen med tilstanden for at indikere hvordan filen skal håndteres:

 

I nedenstående kodestykke åbnes tekstfilen “Storbyer.txt” med tilstanden “Read” og “Text”. Tekstfilens absolutte filsti er angivet. Bemærk at mapperne er adskilt af to omvendte skråstreger (\\), da en enkel omvendt skråstreg er reserveret til bestemte funktioner i Python-sproget:

file = open("C:\\Users\\olive\\Desktop\\Storbyer.txt", "rt")

Når man åbner filer på denne måde, er det vigtigt for programmets funktionalitet, at man også lukker filen igen når man er færdig med at bruge den, med .close(). Dette kan være besværligt, så i stedet for at gøre det på den måde, kan man benytte erklæringen with, ligesom i nedenstående eksempel:

with open("C:\\Users\\olive\\Desktop\\Storbyer.txt", "rt") as min_fil:
  pass

Her er der sat with foran funktionen, som får variablen min_fil. Når man benytter with, så behøver man ikke at lukke filen i programmet. Bemærk at der er lavet en indrykning, hvor man skriver, hvad filen skal bruges til. I eksemplet er der blot skrevet pass som betyder at der ikke sker noget.

 

Læs fil

Der findes tre funktioner som kan læse indholdet i en fil: .read(), .readline() og .readlines().

 

.read()

For at programmet skal læse hele indholdet i en fil, skal man benytte funktionen .read(), ligesom i nedenstående eksempel:

with open("C:\\Users\\olive\\Desktop\\Storbyer.txt") as min_fil:
  print(min_fil.read())

Kodestykket vil udprinte følgende:

Madrid
Stockholm
Oslo
London
Berlin
Milano
Frankfurt
Paris
Nice
Venedig
Sydney

 

.readline()

Funktionen .readline() vil returnere en enkel linje i filen. Den første gang man benytter den vil den returnere den første linje i filen, den anden gang man benytter den vil den returnere den anden linje i filen, og sådan vil det fortsætte. I nedenstående kodestykke bliver den benyttet to gange:

with open("C:\\Users\\olive\\Desktop\\Storbyer.txt") as min_fil:
  print(min_fil.readline())
  print(min_fil.readline())

Kodestykket vil udprinte de to første linjer i filen:

Madrid

Stockholm

 

.readlines()

Man kan benytte .readlines() til at returnere hele filen, linje for linje, i stedet for at returnere hele filen som én stor tekstværdi. På den måde kan man gemme hver linje i en variabel.

I nedenstående kodestykke benyttes et for-loop til at udprinte hver linje i filen ved hjælp af .readlines():

with open("C:\\Users\\olive\\Desktop\\Storbyer.txt") as min_fil:
  for linje in min_fil.readlines():
    print(linje)

Kodestykket vil udprinte følgende:

Madrid 

Stockholm 

Oslo 

London 

Berlin 

Milano 

Frankfurt 

Paris 

Nice 

Venedig 

Sydney

 

Tilføj i fil

For at tilføje indhold i en fil skal benytte funktionen .write().

Derudover skal man åbne den i a-tilstand som står for append (på dansk: tilføj).

I nedenstående eksempel tilføjes værdien “Moskva” til filen “Storbyer.txt”:

with open("C:\\Users\\olive\\Desktop\\Storbyer.txt", "a") as min_fil:
  min_fil.write("Moskva")

Når man åbner filen nu, så vil Moskva være tilføjet til listen over storbyer. Bemærk, at for hver gang man indlæser koden, så vil teksten blive tilføjet endnu en gang til filen.

 

Opret fil

For at oprette en ny fil skal man benytte funktionen open() og angive at tilstanden er x som står for create (på dansk: opret).

I nedenstående eksempel bliver filen ny_fil.txt oprettet og gemt i variablen n:

n = open("ny_fil.txt", "x")

 

Slet fil

For at slette en fil skal man importere modulet os og benytte funktionen os.remove().

I nedenstående eksempel bliver os-modulet importeret og filen ny_fil.txt bliver slettet:

import os
os.remove("ny_fil.txt")