Hvordan håndtere filer i Python

I alle programmeringsspråk er filhåndtering et viktig aspekt. Og Python støtter også arbeid med filer i forskjellige moduser – for eksempel lesing og skriving til filer og mer.

Ved slutten av denne opplæringen vil du kunne:

  • åpne og les filer i Python,
  • lese linjer fra en tekstfil,
  • skrive og legge til filer, og
  • bruke kontekstbehandlere til å jobbe med filer i Python.

Hvordan lese fil i Python

For å åpne en fil i Python, kan du bruke den generelle syntaksen: open(«filnavn»,’modus»).

  • Her er filnavn navnet på filen.

Merk: Hvis filen du vil åpne er i gjeldende arbeidskatalog, kan du bare nevne navnet på filen. Hvis det er i en annen mappe i arbeidsmiljøet ditt, bør du inkludere banen til filen.

  • Parametermodusen spesifiserer modusen du vil åpne filen i.

Standardmodusen for å åpne en fil er lest—angitt med bokstaven «r». Det er imidlertid en anbefalt praksis å spesifisere modusen eksplisitt.

Før vi begynner, la oss ta en titt på filen lib.txt, som vi skal bruke i dette eksemplet.

📁 Last ned tekstfilen og koden som brukes i denne opplæringen fra denne GitHub-repoen.

Kodebiten nedenfor viser hvordan du kan åpne en tekstfil «lib.txt» i Python ved å bruke open()-funksjonen, og lese innholdet.

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, og vi velger å kalle det fil.
  • Deretter kaller vi read()-metoden på filen.
  • Variabelen innhold inneholder nå innholdet i filen. Og vi skriver det ut.
  • Til slutt lukker vi filen.
  Slik gjenoppretter du apper og spill til iPhone eller iPad

Men hvis du glemmer å lukke filen, vil det være mulig sløsing med ressurser. Hvis du jobber med et stort antall slike filer, kan det være betydelig minnebruk. Dette er fordi du har åpnet flere filer, men ikke har lukket noen av dem.

La oss nå lære en bedre måte å åpne filer med kontekstledere. Kodebiten nedenfor viser hvordan du kan bruke dem.

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

Når du bruker kontaktadministratorer til å jobbe med filer, trenger du ikke bruke close()-metoden. Filene lukkes automatisk etter at I/O-operasjonen er fullført.

Hvordan lese linjer fra fil i Python

I vår eksempeltekstfil hadde vi bare noen få linjer. Så å lese inn alt filinnholdet på en gang var ikke noe problem.

Men når du trenger å lese inn store filer, kan det ikke være særlig effektivt å bruke read()-metoden, som vist ovenfor.

Faktisk, hvis tekstfilen er av en veldig stor størrelse, kan du snart gå tom for minne. Det er derfor du kanskje vil lese i skrivebeskyttede linjer fra en tekstfil, og du vil lære hvordan du gjør dette i denne delen.

Bruke Pythons readline()-metode for å lese linjer fra fil

Readline()-metoden leser én linje om gangen, fra filen.

Kjør følgende kodebit.

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:

Du kan se at etter det første readline()-metodekallet, skrives den første linjen i filen ut. Og det andre kallet til readline()-metoden returnerer den andre linjen i filen.

Dette er fordi, etter det første metodekallet, er filpekeren på begynnelsen av den andre linjen.

I Python kan du bruke tell()-metoden for å få gjeldende plassering av filpekeren. Og for å flytte filpekeren til et bestemt sted, kan du bruke seek()-metoden.

I kodebiten nedenfor bruker vi f.seek(0) etter det første metodekallet. Dette flytter filpekeren til begynnelsen av tekstfilen. Det er derfor, begge gangene, den første linjen i filen skrives ut.

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!

Bruke Pythons readlines()-metode for å lese linjer fra fil

Det er en annen nært beslektet metode kalt readlines().

  Hvordan organisere apper gjennom mapper på iPhone

Når du kjører følgende kodebit, vil du se at readlines()-metoden 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']

Bruke Python’s for Loop for å lese linjer fra fil

For å lese inn linjene fra en tekstfil kan du også bruke for-løkken.

Når du har et filobjekt, kan du bruke for loop for å iterere gjennom innholdet i filen – én linje om gangen og skrive dem ut, som vist nedenfor. Legg merke til hvordan vi bare får tilgang til én linje om gangen og ikke leser inn hele filens innhold.

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

Merk: Når du bruker Pythons print()-funksjon, er standardskilletegn et nylinje-«n»-tegn. Men i den originale filen har vi ikke disse nye linjene. Så sett skilleargumentet til en tom streng: end = ” for å skrive ut innholdet i filen som det er.

Hvordan lese deler av innhold fra fil i Python

I Python kan du også velge å lese inn innholdet i filen i form av små biter.

Les gjennom koden nedenfor:

  • Her setter vi chunk_size til 50. Det betyr at de første 50 tegnene i filen blir lest inn, og vi skriver dem også ut.
  • Kall nå tell()-metoden på filobjektet f. Du kan se at filpekeren nå er på posisjon 51 – som er som forventet.
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

Du kan også bruke denne teknikken til å lese inn hele filen i form av små biter.

  Hvilke iPhones har trådløs lading?

Følgende kodebit viser hvordan du kan gjøre dette.

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

Her bruker vi en while-løkke for å lese innholdet i filen. Vi leser inn filens innhold i biter av størrelse 50 til vi kommer til slutten av filen. ✅

Hvordan skrive til fil i Python

For å skrive til en tekstfil i Python, bør du åpne den i skrivemodus – spesifisere «w».

Kodebiten nedenfor viser hvordan du gjør det.

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

Du vil se at «new_file.txt» er opprettet i arbeidskatalogen din.

Kjør nå kodecellen ovenfor igjen.

Kjør følgende kommando i terminalen din:

cat new_file.txt

# Output: Hello, Python!

Ideelt sett har vi skrevet til filen to ganger. Så hei, Python! burde vært trykket to ganger, ja?

Men du vil se at den bare har blitt skrevet ut én gang. Vel, dette er fordi når du åpner en fil i skrivemodus (w), overskriver du i utgangspunktet innholdet i filen med nytt innhold.

Hvis du vil legge til på slutten av filen uten å overskrive eksisterende innhold, bør du åpne filen i tilleggsmodus. Og du vil se hvordan du gjør dette i neste avsnitt.

Slik legger du til fil i Python

Hvis du vil legge til innhold i en fil – uten å overskrive, åpner du den i tilleggsmodus.

For å gjøre dette, bruk `’a’—a for å legge til—og spesifiser modusen eksplisitt.

Deretter kjører du følgende kodecelle to ganger.

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

Legg merke til hvordan teksten skrives ut to ganger nå, slik vi har lagt til filen.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Konklusjon

La oss raskt oppsummere hva vi har gått over i denne opplæringen.

  • Du har lært de vanlige fil-I/O-operasjonene som å lese, skrive og legge til en fil.
  • I tillegg har du også lært hvordan du bruker seek()-metoden for å flytte filpekeren til en bestemt posisjon, og
  • hvordan bruke tell()-metoden for å hente gjeldende posisjon til filpekeren.

Jeg håper du fant denne opplæringen nyttig. Nå som du har lært hvordan du jobber med tekstfiler i Python, kan du lære hvordan du jobber med JSON-filer i Python.

I slekt:

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