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.