Sådan håndteres filer i Python

I ethvert programmeringssprog er filhåndtering et vigtigt aspekt. Og Python understøtter også arbejde med filer i forskellige tilstande – såsom læsning og skrivning til filer og mere.

Ved slutningen af ​​denne vejledning vil du være i stand til at:

  • åbne og læse filer i Python,
  • læse linjer fra en tekstfil,
  • skrive og tilføje filer, og
  • bruge kontekstadministratorer til at arbejde med filer i Python.

Sådan læser du fil i Python

For at åbne en fil i Python kan du bruge den generelle syntaks: open(‘filnavn’,’tilstand’).

  • Her er filnavn navnet på filen.

Bemærk: Hvis den fil, du vil åbne, er i den aktuelle arbejdsmappe, kan du kun nævne navnet på filen. Hvis det er i en anden mappe i dit arbejdsmiljø, skal du inkludere stien til filen.

  • Parametertilstanden angiver den tilstand, hvor du vil åbne filen.

Standardtilstanden til at åbne en fil er læst – angivet med bogstavet ‘r’. Det er dog en anbefalet praksis at specificere tilstanden eksplicit.

Før vi begynder, lad os tage et kig på filen lib.txt, som vi vil bruge i dette eksempel.

📁 Download tekstfilen og koden, der bruges i denne vejledning fra denne GitHub-repo.

Kodestykket nedenfor viser, hvordan du kan åbne en tekstfil ‘lib.txt’ i Python ved hjælp af funktionen open() og læse dens indhold.

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 ovenstående eksempel,

  • Open()-funktionen returnerer et filobjekt, og vi vælger at kalde det fil.
  • Dernæst kalder vi read() metoden på filen.
  • Variablen indhold indeholder nu indholdet af filen. Og vi printer det ud.
  • Til sidst lukker vi filen.
  Hvad er den gule Outlook-trekant?

Men hvis du glemmer at lukke filen, vil der være et muligt spild af ressourcer. Hvis du arbejder med et stort antal af sådanne filer, kan der være et betydeligt hukommelsesforbrug. Dette skyldes, at du har åbnet flere filer, men ikke har lukket nogen af ​​dem.

Lad os nu lære en bedre måde at åbne filer vha kontekstledere. Kodestykket nedenfor viser, hvordan du kan bruge dem.

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

Når du bruger kontaktadministratorer til at arbejde med filer, behøver du ikke bruge close()-metoden. Filerne lukkes automatisk, når I/O-handlingen er fuldført.

Sådan læser du linjer fra fil i Python

I vores eksempeltekstfil havde vi kun et par linjer. Så det var ikke noget problem at læse hele filens indhold på én gang.

Men når du skal læse i store filer, er det muligvis ikke særlig effektivt at bruge read()-metoden, som vist ovenfor.

Faktisk, hvis tekstfilen er af en meget stor størrelse, kan du snart løbe tør for hukommelse. Det er derfor, du måske ønsker at læse i skrivebeskyttede linjer fra en tekstfil, og du vil lære, hvordan du gør dette i dette afsnit.

Brug af Pythons readline()-metode til at læse linjer fra fil

Readline()-metoden læser en linje ad gangen fra filen.

Kør følgende kodestykke.

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 efter det første readline()-metodekald, udskrives den første linje i filen. Og det andet kald til readline()-metoden returnerer den anden linje i filen.

Dette er fordi, efter det første metodekald, er filmarkøren i begyndelsen af ​​den anden linje.

I Python kan du bruge metoden tell() til at få den aktuelle placering af filmarkøren. Og for at flytte filmarkøren til en bestemt placering kan du bruge seek()-metoden.

I kodestykket nedenfor bruger vi f.seek(0) efter det første metodekald. Dette flytter filmarkøren til begyndelsen af ​​tekstfilen. Det er derfor, begge gange, at den første linje i filen udskrives.

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!

Brug af Pythons readlines()-metode til at læse linjer fra fil

Der er en anden tæt beslægtet metode kaldet readlines().

  8 Bedste økonomistyringssoftware til SMB i 2022

Når du kører følgende kodestykke, vil du se, at readlines()-metoden returnerer en liste over alle linjerne 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']

Brug af Python’s for Loop til at læse linjer fra fil

For at læse linjerne fra en tekstfil, kan du også bruge for-løkken.

Når du har et filobjekt, kan du bruge for loop til at iterere gennem indholdet af filen – en linje ad gangen og printe dem ud, som vist nedenfor. Læg mærke til, hvordan vi kun får adgang til én linje ad gangen og ikke læser hele filens indhold.

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

Bemærk: Når du bruger Pythons print()-funktion, er standardseparatoren et nylinje-‘n’-tegn. Men i den originale fil har vi ikke disse nye linjer. Så sæt separatorargumentet til en tom streng: end = ” for at udskrive indholdet af filen, som det er.

Sådan læser du bidder af indhold fra fil i Python

I Python kan du også vælge at læse indholdet af filen i form af små bidder.

Læs koden nedenfor:

  • Her sætter vi chunk_size til 50. Det betyder, at de første 50 tegn i filen bliver læst ind, og vi printer dem også ud.
  • Kald nu tell()-metoden på filobjektet f. Du kan se, at filmarkøren nu er på position 51 – hvilket 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å bruge denne teknik til at læse hele filen i form af små bidder.

  Sådan downloader du IGTV-videoer?

Følgende kodestykke viser, hvordan du kan gø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 bruger vi en while-løkke til at læse indholdet af filen. Vi læser filens indhold ind i bidder af størrelse 50, indtil vi når slutningen af ​​filen. ✅

Sådan skriver du til fil i Python

For at skrive til en tekstfil i Python, skal du åbne den i skrivetilstanden—angive ‘w’.

Kodestykket nedenfor viser, hvordan du gør det.

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

Du vil se, at ‘new_file.txt’ er blevet oprettet i din arbejdsmappe.

Kør nu ovenstående kodecelle igen.

Kør følgende kommando i din terminal:

cat new_file.txt

# Output: Hello, Python!

Ideelt set har vi skrevet til filen to gange. Så hej, Python! skulle have været udskrevet to gange, ja?

Men du vil se, at det kun er blevet udskrevet én gang. Nå, det skyldes, at når du åbner en fil i skrive (w)-tilstand, overskriver du grundlæggende indholdet af filen med nyt indhold.

Hvis du gerne vil tilføje til slutningen af ​​filen uden at overskrive eksisterende indhold, skal du åbne filen i tilføjelsestilstand. Og du vil se, hvordan du gør dette i næste afsnit.

Sådan tilføjes til fil i Python

Hvis du gerne vil føje indhold til en fil – uden at overskrive, skal du åbne den i tilføjelsestilstand.

For at gøre dette, brug `’a’—a for at tilføje—og specificer tilstanden eksplicit.

Kør derefter følgende kodecelle to gange.

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

Læg mærke til, hvordan teksten udskrives to gange nu, som vi vedhæftede til filen.

cat new_file.txt

# Output: Hello, Python!Hello, Python!

Konklusion

Lad os hurtigt opsummere, hvad vi har gennemgået i denne tutorial.

  • Du har lært de almindelige fil-I/O-handlinger såsom læsning, skrivning og tilføjelse til en fil.
  • Derudover har du også lært, hvordan du bruger metoden seek() til at flytte filmarkøren til en bestemt position, og
  • hvordan man bruger tell()-metoden til at hente den aktuelle position af filmarkøren.

Jeg håber, du fandt denne tutorial nyttig. Nu hvor du har lært, hvordan du arbejder med tekstfiler i Python, kan du lære, hvordan du arbejder med JSON-filer i Python.

Relaterede:

Tjek længden af ​​en liste i Python i 3 trin.