Sådan åbner du en fil ved hjælp af with-sætningen
Det med nøgleord i Python bruges som konteksthåndtering. Som i ethvert programmeringssprog er brugen af ressourcer som filoperationer eller databaseforbindelser meget almindelig. Men disse ressourcer er begrænsede i udbuddet. Derfor ligger hovedproblemet i at sørge for at frigive disse ressourcer efter brug. Hvis de ikke frigives, vil det føre til ressourcelækage og kan få systemet til enten at bremse eller gå ned.
Som vi ved, bruges funktionen open() generelt til filhåndtering i Python. Men det er en standardpraksis at bruge kontekstadministratorer som med nøgleord til at håndtere filer, da det automatisk frigiver filer, når brugen er fuldført.
Python med open() Syntaks:
Syntaks:
med åben(filsti, tilstand, kodning) som fil:
…
fil_sti: Det er stien til filen, der skal åbnes
mode: driftstilstand på filen. eks.: læse, skrive osv. (repræsenteret ved r, w, r+, w+, rb, wb osv.)
indkodning: læs filen i korrekt kodningsformat.
Eksempel 1: Simpelt eksempel, der bruger The with Statement
Vi har allerede et filnavn geeksforgeeks.txt i vores system, og det har følgende data:
geeksforgeeks,txt
Nu vil vi åbne filen og læse indholdet af filen ved at bruge med open()-sætning:
Python3
with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > file_content> => gfg_file.read()> > print> (file_content)> |
Produktion:
GeeksForGeeks is best for DSA
Bemærk: Her har vi brugt mode som r at læse dataene, fordi målfilen har tekstdata. I tilfælde af at vi læser en binær fil, skal vi bruge rb som tilstanden.
Eksempel 2: Vi kan også bruge med sætning for at tilføje eller skrive data til filen.
Vi tilføjer strengen Hej nørder! til vores geeksforgeeks.txt-fil.
Python3
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > # reading the file contents> # to verify if successfully appended the data> with> open> (> 'geeksforgeeks.txt'> ,> 'r'> ) as gfg_file:> > content> => gfg_file.read()> > print> (content)> |
Produktion:
GeeksForGeeks is best for DSA Hello Geeks!
Bemærk: Her har vi brugt -en som måden at åbne filen på, er det fordi vi ønsker at tilføje til fildataene. I stedet, hvis vi ønskede at overskrive fildataene, ville vi bruge I mode.
Eksempel 3: Brug af indlejret med åben sætning til at åbne flere filer
links.txt
Vi har defineret en links.txt fil, der indeholder nogle tilfældige links. Vi åbner geeksforgeeks.txt fil nævnt ovenfor og tilføj indholdet af linkfilen i geeksforgeeks.txt fil.
Python3
# appending string to file> with> open> (> 'geeksforgeeks.txt'> ,> 'a'> ) as gfg_file:> > gfg_file.write(> '
Hello Geeks!'> )> > with> open> (> 'links.txt'> ,> 'r'> ) as links_file:> > lines> => links_file.readlines()> > gfg_file.writelines(lines)> |
geeksforgeeks.txt filindhold efter ændring:
geeksforgeeks,txt
Her kan vi se, at indholdet af links.txt fil er blevet tilføjet til geeksforgeeks.txt fil efter at have kørt scriptet.
Forskellen på at bruge open() og med open()
Selvom funktionen ved at bruge åben() og med åben() er nøjagtig det samme, men der er nogle vigtige forskelle:
- Ved at bruge open() kan vi bruge filbehandleren, så længe filen ikke eksplicit er blevet lukket vha file_handler.close() , men i tilfælde af brug med open() context manager, kan vi ikke bruge en filhåndtering uden for with-blokken. Det vil hæve ValueError: I/O-operation på lukket fil i det tilfælde.
- Mens vi bruger open() er vi nødt til eksplicit at lukke en åbnet filforekomst, ellers kan andre dele af koden støde på fejl, mens vi åbner den samme fil. I med open() håndteres lukningen af filen af konteksthåndteringen.
- Brug med open() kontekstsætning gør koden mere ryddig, da vi nemt kan adskille kodeblokke ved forskel i indrykning. I tilfælde af open(), kan vi gå glip af at lukke filforekomsten, dette kan forårsage hukommelseslækager og andre I/O-driftsfejl.