IL con La parola chiave in Python viene utilizzata come gestore del contesto. Come in qualsiasi linguaggio di programmazione, l'utilizzo di risorse come operazioni su file o connessioni a database è molto comune. Ma queste risorse sono limitate. Pertanto, il problema principale sta nell'assicurarsi di rilasciare queste risorse dopo l'utilizzo. Se non vengono rilasciati, ciò comporterà una perdita di risorse e potrebbe causare il rallentamento o l'arresto anomalo del sistema.
Come sappiamo, la funzione open() viene generalmente utilizzata per la gestione dei file in Python. Ma è una pratica standard utilizzare gestori di contesto come le parole chiave per gestire i file poiché rilascerà automaticamente i file una volta completato il suo utilizzo.
Python con la sintassi open():
Sintassi:
con open(percorso_file, modalità, codifica) come file:
…
percorso del file: È il percorso del file da aprire
modalità: modalità di funzionamento del file. es.: leggi, scrivi ecc. (rappresentato da r, w, r+, w+, rb, wb ecc.)
codifica: leggere il file nel formato di codifica corretto.
Esempio 1: Semplice esempio di utilizzo dell'istruzione with
Abbiamo già un nome di file geeksforgeeks.txt nel nostro sistema e contiene i seguenti dati:

geeksforgeeks, txt
Ora apriremo il file e leggeremo il contenuto del file utilizzando l'istruzione with open():
Python3
comando tocco in linux
with>open>(>'geeksforgeeks.txt'>,>'r'>) as gfg_file:> >file_content>=> gfg_file.read()> >print>(file_content)> |
>
>
Produzione:
GeeksForGeeks is best for DSA>
Nota: Qui abbiamo utilizzato la modalità as R per leggere i dati, perché il file di destinazione contiene dati di testo. Nel caso in cui stiamo leggendo un file binario, dobbiamo usare RB come modalità.
Esempio 2: Possiamo anche usare il con istruzione per aggiungere o scrivere dati nel file.
Aggiungeremo la stringa Ciao geek! nel nostro file geeksforgeeks.txt.
Python3
convertire una stringa fino ad oggi
# 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)> |
>
>
Produzione:
GeeksForGeeks is best for DSA Hello Geeks!>
Nota: Qui abbiamo usato UN come modalità di apertura del file, questo perché vogliamo aggiungere al file i dati. Se invece volessimo sovrascrivere i dati del file, utilizzeremmo l'estensione In modalità.
Esempio 3: utilizzo dell'istruzione nidificata con open per aprire più file

link.txt
Abbiamo definito a link.txt file contenente alcuni collegamenti casuali. Apriremo il geeksforgeeks.txt file menzionato sopra e aggiungi il contenuto del file dei collegamenti nel file geeksforgeeks.txt file.
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 contenuto del file dopo la modifica:

geeksforgeeks, txt
Qui possiamo vedere che il contenuto del file link.txt il file è stato aggiunto al file geeksforgeeks.txt file dopo aver eseguito lo script.
Differenza tra l'uso di open() e open()
Sebbene la funzione di utilizzo aprire() E con aprire() è esattamente lo stesso ma ci sono alcune differenze importanti:
- Utilizzando open() possiamo utilizzare il gestore di file purché il file non sia stato esplicitamente chiuso utilizzando file_handler.close() , ma in caso di utilizzo con il gestore di contesto open(), non possiamo utilizzare un gestore di file al di fuori del blocco with. Aumenterà ValueError: operazione di I/O su file chiuso in quel caso.
- Durante l'utilizzo di open() dobbiamo chiudere esplicitamente un'istanza di file aperta, altrimenti altre parti del codice potrebbero riscontrare errori durante l'apertura dello stesso file. Con open() la chiusura del file è gestita dal gestore del contesto.
- L'uso con l'istruzione di contesto open() rende il codice più ordinato poiché possiamo facilmente separare i blocchi di codice in base alla differenza nei rientri. In caso di open(), potremmo non riuscire a chiudere l'istanza del file, ciò potrebbe causare perdite di memoria e altri errori nelle operazioni di I/O.