logo

Hoe een bestand te openen met behulp van de instructie with

De met trefwoord in Python wordt gebruikt als contextmanager. Zoals in elke programmeertaal is het gebruik van bronnen zoals bestandsbewerkingen of databaseverbindingen heel gebruikelijk. Maar deze hulpbronnen zijn beperkt in aanbod. Daarom ligt het grootste probleem in het vrijgeven van deze bronnen na gebruik. Als ze niet worden vrijgegeven, zal dit leiden tot het lekken van hulpbronnen en kan het systeem vertragen of crashen.

Zoals we weten, wordt de functie open() over het algemeen gebruikt voor bestandsverwerking in Python. Maar het is een standaardpraktijk om contextmanagers te gebruiken, zoals bij trefwoorden, om bestanden te verwerken, omdat bestanden automatisch worden vrijgegeven zodra het gebruik ervan is voltooid.

Python met open() Syntaxis:

Syntaxis:



met open(bestandspad, modus, codering) als bestand:

bestandspad: Het is het pad naar het bestand dat moet worden geopend

modus: werkingsmodus van het bestand. bijv.: lezen, schrijven enz. (weergegeven door r, w, r+, w+, rb, wb enz.)

codering: lees het bestand in het juiste coderingsformaat.

Voorbeeld 1: Eenvoudig voorbeeld met behulp van de with-instructie

We hebben al een bestandsnaam geeksforgeeks.txt in ons systeem, en het heeft de volgende gegevens:

geeksforgeeks, txt

Nu zullen we het bestand openen en de inhoud van het bestand lezen met behulp van de open() -instructie:

Python3

wat is rom




with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >file_content>=> gfg_file.read()> >print>(file_content)>

>

>

Uitgang:

GeeksForGeeks is best for DSA>

Opmerking: Hier hebben we modus as gebruikt R om de gegevens te lezen, omdat het doelbestand tekstgegevens bevat. Als we een binair bestand lezen, moeten we gebruiken rb als de modus.

Voorbeeld 2: Wij kunnen ook gebruik maken van de met instructie om gegevens aan het bestand toe te voegen of naar het bestand te schrijven.

We zullen de string toevoegen Hallo nerds! naar ons geeksforgeeks.txt-bestand.

Python3




scriptshell uitvoeren
# 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)>

>

>

Uitgang:

GeeksForGeeks is best for DSA Hello Geeks!>

Opmerking: Hier hebben we gebruik van gemaakt A als de manier om het bestand te openen, dit komt omdat we gegevens aan het bestand willen toevoegen. Als we de bestandsgegevens wilden overschrijven, zouden we in plaats daarvan de In modus.

Voorbeeld 3: Geneste met open-instructie gebruiken om meerdere bestanden te openen

Hoe een bestand te openen met behulp van de instructie with

links.txt

We hebben een gedefinieerd links.txt bestand met enkele willekeurige links. Wij zullen de openen geeksforgeeks.txt het hierboven genoemde bestand en voeg de inhoud van het koppelingsbestand toe aan het geeksforgeeks.txt bestand.

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 bestandsinhoud na wijziging:

Hoe een bestand te openen met behulp van de instructie with

geeksforgeeks, txt

Hier kunnen we zien dat de inhoud van de links.txt bestand is toegevoegd aan de geeksforgeeks.txt bestand nadat het script is uitgevoerd.

Verschil tussen het gebruik van open() versus open()

Hoewel de functie van het gebruik open() En met open() is precies hetzelfde, maar er zijn enkele belangrijke verschillen:

  • Met open() kunnen we de bestandshandler gebruiken zolang het bestand niet expliciet is gesloten met file_handler.close() , maar als we de contextmanager open() gebruiken, kunnen we geen bestandshandler buiten het with-blok gebruiken. Het zal stijgen ValueError: I/O-bewerking op gesloten bestand in dat geval.
  • Bij het gebruik van open() moeten we een geopende bestandsinstantie expliciet sluiten, anders kunnen andere delen van de code fouten tegenkomen bij het openen van hetzelfde bestand. Bij open() wordt het sluiten van het bestand afgehandeld door de contextmanager.
  • Het gebruik van de contextinstructie open() maakt de code overzichtelijker, omdat we de codeblokken gemakkelijk kunnen scheiden op basis van het verschil in inspringingen. In het geval van open() missen we mogelijk het sluiten van de bestandsinstantie. Dit kan geheugenlekken en andere I/O-bewerkingsfouten veroorzaken.