Der mit Das Schlüsselwort in Python wird als Kontextmanager verwendet. Wie in jeder Programmiersprache ist die Nutzung von Ressourcen wie Dateioperationen oder Datenbankverbindungen weit verbreitet. Doch diese Ressourcen sind nur begrenzt verfügbar. Daher besteht das Hauptproblem darin, sicherzustellen, dass diese Ressourcen nach der Nutzung freigegeben werden. Wenn sie nicht freigegeben werden, führt dies zu einem Ressourcenverlust und kann zu einer Verlangsamung oder einem Absturz des Systems führen.
Wie wir wissen, wird die Funktion open() im Allgemeinen für die Dateiverwaltung in Python verwendet. Es ist jedoch gängige Praxis, Kontextmanager wie mit Schlüsselwörtern zum Umgang mit Dateien zu verwenden, da sie Dateien automatisch freigeben, sobald ihre Verwendung abgeschlossen ist.
Python mit open() Syntax:
Syntax:
mit open(Dateipfad, Modus, Kodierung) als Datei:
…
Dateipfad: Es ist der Pfad zu der Datei, die geöffnet werden soll
Modus: Betriebsart für die Datei. Bsp.: lesen, schreiben usw. (dargestellt durch r, w, r+, w+, rb, wb usw.)
Codierung: Lesen Sie die Datei im richtigen Codierungsformat.
Beispiel 1: Einfaches Beispiel mit der with-Anweisung
Wir haben bereits einen Dateinamen geeksforgeeks.txt in unserem System, und es enthält die folgenden Daten:

geeksforgeeks,txt
Jetzt öffnen wir die Datei und lesen den Inhalt der Datei mit der Anweisung open():
Python3
git add --all
with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >file_content>=> gfg_file.read()> >print>(file_content)> |
>
>
Ausgabe:
GeeksForGeeks is best for DSA>
Notiz: Hier haben wir den Modus as verwendet R um die Daten zu lesen, da die Zieldatei Textdaten enthält. Falls wir eine Binärdatei lesen, müssen wir diese verwenden rb als Modus.
Beispiel 2: Wir können auch die verwenden mit Anweisung zum Anhängen oder Schreiben von Daten in die Datei.
Wir werden die Zeichenfolge anhängen Hallo Geeks! zu unserer geeksforgeeks.txt-Datei.
Python3
Konvertieren Sie einen String in ein Zeichen
# 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)> |
>
>
Ausgabe:
GeeksForGeeks is best for DSA Hello Geeks!>
Notiz: Hier haben wir verwendet A Als Modus zum Öffnen der Datei liegt dies daran, dass wir Daten an die Datei anhängen möchten. Wenn wir stattdessen die Dateidaten überschreiben wollten, würden wir die verwenden In Modus.
Beispiel 3: Verwendung einer verschachtelten with open-Anweisung zum Öffnen mehrerer Dateien

links.txt
Wir haben a definiert links.txt Datei mit einigen zufälligen Links. Wir werden das öffnen geeksforgeeks.txt Datei oben erwähnt und fügen Sie den Inhalt der Linkdatei in die Datei ein geeksforgeeks.txt Datei.
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 Dateiinhalt nach der Änderung:

geeksforgeeks,txt
Hier können wir sehen, dass der Inhalt der links.txt Datei wurde hinzugefügt geeksforgeeks.txt Datei nach der Ausführung des Skripts.
Unterschied zwischen der Verwendung von open() und open()
Obwohl die Funktion der Verwendung offen() Und mit offen() ist genau das Gleiche, es gibt jedoch einige wichtige Unterschiede:
- Mit open() können wir den Dateihandler verwenden, solange die Datei nicht explizit mit geschlossen wurde file_handler.close() , aber im Falle der Verwendung des Kontextmanagers open() können wir keinen Dateihandler außerhalb des with-Blocks verwenden. Es wird steigen ValueError: E/A-Vorgang für geschlossene Datei In diesem Fall.
- Bei der Verwendung von open() müssen wir eine geöffnete Dateiinstanz explizit schließen, andernfalls können andere Teile des Codes beim Öffnen derselben Datei auf Fehler stoßen. Bei open() wird das Schließen der Datei vom Kontextmanager übernommen.
- Durch die Verwendung der Kontextanweisung „open()“ wird der Code aufgeräumter, da wir Codeblöcke leicht durch unterschiedliche Einrückungen trennen können. Im Falle von open() verpassen wir möglicherweise das Schließen der Dateiinstanz, was zu Speicherverlusten und anderen E/A-Vorgangsfehlern führen kann.