Mester Filhåndtering i Python: En Komplet Guide

Filhåndtering i Python: En Dyptgående Guide

I programmering er filhåndtering en fundamental oppgave, og Python gir omfattende støtte for å manipulere filer på ulike måter. Dette inkluderer lesing, skriving og tillegging av innhold til filer.

Etter å ha fullført denne veiledningen, vil du være i stand til å:

  • Åpne og lese filer i Python.
  • Hente linjer fra en tekstfil.
  • Skrive til og legge til innhold i filer.
  • Benytte kontekstbehandlere for effektiv filhåndtering i Python.

Hvordan Lese Filer i Python

For å åpne en fil i Python, brukes `open()`-funksjonen med følgende struktur: `open(«filnavn», «modus»)`.

  • `filnavn` refererer til navnet på filen du ønsker å håndtere.

Dersom filen er plassert i samme mappe som skriptet ditt, trenger du kun å oppgi filnavnet. Hvis den ligger i en annen mappe, må du spesifisere hele filbanen.

  • `modus`-parameteren angir hvordan filen skal åpnes (f.eks. lese, skrive, legge til).

Standardmodus for å åpne en fil er lesemodus (`»r»`), men det anbefales å eksplisitt definere denne modusen.

Før vi starter, la oss se på `lib.txt` filen som vi vil bruke som eksempel.

📁 Du kan laste ned tekstfilen og koden som brukes i denne guiden fra denne GitHub-repositoriet.

Følgende kode demonstrerer hvordan du åpner en tekstfil, `lib.txt`, i Python ved hjelp av `open()`-funksjonen og leser dens innhold:

file = open('lib.txt','r')
contents = file.read()
print(contents)
file.close()


# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels
  

I eksemplet ovenfor:

  • `open()`-funksjonen returnerer et filobjekt som vi har kalt `fil`.
  • `read()`-metoden kalles på `fil` for å lese innholdet.
  • Innholdet i filen lagres i variabelen `contents`, som deretter skrives ut.
  • Til slutt lukkes filen med `close()`.

Hvis du glemmer å lukke en fil, kan det føre til unødvendig ressursbruk, spesielt ved håndtering av mange filer. Dette kan føre til betydelig minnebruk.

La oss se på en bedre måte å håndtere filer på med kontekstbehandlere. Koden nedenfor demonstrerer bruken av kontekstbehandlere:

with open('lib.txt','r') as f:
  contents = f.read()
  print(contents)

Ved bruk av kontekstbehandlere trenger du ikke eksplisitt å bruke `close()`-metoden. Filene lukkes automatisk etter at operasjonene er fullført.

Lese Linjer fra Filer i Python

I vår eksempel tekstfil hadde vi få linjer, og derfor var det ikke noe problem å lese hele innholdet inn i minnet.

Ved håndtering av store filer, kan det derimot være ineffektivt å bruke `read()`-metoden, da det kan føre til minnebegrensninger. Det kan derfor være lurt å lese linjer fra en fil. La oss se på hvordan dette kan gjøres.

`readline()` for å Hente Enkeltlinjer

`readline()`-metoden leser en enkelt linje fra filen om gangen.

Ta en titt på følgende kode:

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  line = f.readline()
  print(line)


# Output
Hello, there!

Here are a few helpful Python libraries:

Etter første kallet til `readline()`, skrives første linje ut, mens det andre kallet henter den andre linjen.

Dette skjer fordi filpekeren flyttes til starten av neste linje etter hvert kall.

I Python kan du bruke `tell()` for å finne gjeldende posisjon til filpekeren, og `seek()` for å flytte den til en spesifikk posisjon.

I koden nedenfor flytter `f.seek(0)` filpekeren til starten av filen. Som et resultat vil den første linjen skrives ut to ganger.

with open('lib.txt','r') as f:
  line = f.readline()
  print(line)
  f.seek(0)
  line = f.readline()
  print(line)


# Output
Hello, there!

Hello, there!

`readlines()` for å Hente Alle Linjer

Det finnes også en beslektet metode, `readlines()`, som returnerer en liste over alle linjene i filen.

with open('lib.txt','r') as f:
  lines = f.readlines()
  print(lines)


# Output
['Hello, there!n', 'Here are a few helpful Python libraries:n', 
'1) NumPyn', '2) pandasn', '3) matplotlibn', 
'4) seabornn', '5) scikit-learnn', '6) BeautifulSoupn', 
'7) Scrapyn', '8) nltkn', '9) Bokehn', '10) statsmodelsn', 'n']

For-Løkker for å Lese Linjer

Du kan også benytte en for-løkke for å iterere gjennom filinnholdet, og skrive ut linje for linje, uten å laste inn hele filen på en gang.

with open('lib.txt','r') as f:
  for line in f:
    print(line, end='')

Merk: Standard separator i print() er et linjeskift («\n»). For å unngå doble linjeskift settes `end=»»`.

Lese Deler av Innhold i Python

I Python kan du også lese innhold i mindre biter.

Sjekk ut koden nedenfor:

  • Her settes `chunk_size` til 50. De første 50 tegnene i filen leses og skrives ut.
  • `tell()` kalles for å hente filpekerens posisjon, som forventet er 51.
chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk)
  current = f.tell()
  print(f"Current position of file pointer: {current}")

# Output
Hello, there!
Here are a few helpful Python librar
Current position of file pointer: 51

Denne metoden kan også brukes til å lese inn hele filen i biter.

chunk_size = 50
with open('lib.txt','r') as f:
  chunk = f.read(chunk_size)
  print(chunk,end='')

  while(len(chunk)>0):
    chunk = f.read(chunk_size)
    print(chunk,end='')

# Output
Hello, there!
Here are a few helpful Python libraries:
1) NumPy
2) pandas
3) matplotlib
4) seaborn
5) scikit-learn
6) BeautifulSoup
7) Scrapy
8) nltk
9) Bokeh
10) statsmodels

Vi bruker en while-løkke for å lese innholdet i 50-tegns biter til vi når slutten av filen. ✅

Skrive til Filer i Python

For å skrive til en tekstfil i Python, åpner du filen i skrivemodus (`»w»`).

Følgende kode demonstrerer dette:

with open('new_file.txt','w') as f:
  f.write('Hello, Python!')

Dette vil opprette filen `new_file.txt` i din arbeidsmappe.

Hvis du nå kjører koden på nytt, og deretter kjører denne kommandoen i terminalen:

cat new_file.txt

# Output: Hello, Python!

Du vil se at den kun viser «Hello, Python!» en gang. Dette er fordi åpning av en fil i skrivemodus (`»w»`) overskriver eksisterende innhold.

For å legge til innhold uten å overskrive, må du åpne filen i tilleggsmodus, som beskrevet i neste seksjon.

Legge til Innhold i Filer i Python

For å legge til innhold i en fil uten å overskrive, åpner du den i tilleggsmodus (`»a»`).

Kjør følgende kode to ganger:

with open('new_file.txt','a') as f:
  f.write('Hello, Python!')

Dette vil resultere i at teksten legges til filen to ganger:

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Konklusjon

La oss oppsummere hva vi har gått gjennom i denne veiledningen.

  • Vi har gjennomgått grunnleggende filoperasjoner: lesing, skriving og tillegging til filer.
  • Vi har også sett på hvordan `seek()` brukes for å flytte filpekeren, og hvordan `tell()` henter filpekerens posisjon.

Vi håper denne guiden var nyttig. Nå som du har lært om filhåndtering, kan du se på hvordan du jobber med JSON-filer i Python.

Relatert:

Sjekk lengden på en liste i Python i 3 trinn.