Come qualsiasi altro linguaggio di programmazione che si rispetti anche Python integra delle funzionalitร appositamente dedicate alle gestione dei file. Lo sviluppatore ha quindi a disposizione diverse funzioni native attraverso le quali aprire, leggere, scrivere e chiudere un file dopo averlo manipolato; sono inoltre previste delle modalitร (o privilegi) di accesso ai documenti che consentiranno di effettuare tutte le operazioni possibili o soltanto alcune di esse.
Apertura di un file con Python
Per aprire un file con Python si dovrร utilizzare la funzione open() che accetta come parametri il nome del file da aprire e, opzionalmente, la modalitร di accesso a questโultimo. Per proporre un esempio pratico creiamo un file chiamato "text.txt", scriviamo qualcosa al suo interno e salviamolo sullo stesso percorso dei moduli "app" e "xmenoy". Ora apriamo la shell di Python e lanciamo il seguente comando:
# Aprire un file con Python nella directory corrente
>>> open("text.txt")
<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>
# Aprire un file con Python specificandone il percorso nel file system
>>> open("C:/Python/text.txt")
<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>
Fatto questo il file sarร aperto in modalitร di (sola) lettura che รจ poi quella predefinita, quesโultima viene confermata dallโoutput prodotto dove lโinformazione "mode=โrโ" indica appunto la modalitร corrente ("r" sta infatti per "read").
Modalitร di accesso ai file
Le modalitร di accesso ai file vengono tutte rappresentate da un singolo carattere e sono schematizzabili come segue:
Modalitร | Descrizione |
---|---|
r | Apre il file in lettura e ne restituisce il contenuto sotto forma di stringa. |
w | Apre un file in scrittura, se il file non esiste lo crea. Se il file presenta del contenuto questo viene sovrascritto. |
x | Apre un file creandolo, se il file esiste giร lโoperazione non ha successo. |
a | Apre un file consentendo di accodare dei contenuti a quelli giร presenti, nel caso in cui il file non esista viene creato ex novo. |
t | Apre un file in modalitร testo. |
b | Apre un file in modalitร binaria. |
+ | Apre un file in lettura e scrittura per lโaggiornamento. |
Cosรฌ come "r" anche "t" รจ una modalitร predefinita in Python, quindi un file aperto con"open()" sarร automaticamente aperto anche in modalitร lettura e testo; ciรฒ significa che digitare lโistruzione:
>>> open("text.txt")
<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>
equivale sia a:
>>> open("text.txt",'r')
<_io.TextIOWrapper name='text.txt' mode='r' encoding='cp1252'>
che a:
>>> open("text.txt",'rt')
<_io.TextIOWrapper name='text.txt' mode='rt' encoding='cp1252'>
La modalitร di accesso di un file puรฒ essere implicita, e in quel caso varranno le modalitร di default, o esplicita, dove รจ lo sviluppatore ad indicare la modalitร desiderata. Nello stesso modo si ha la possibilitร di esplicitare lโencoding, cioรจ la codifica dei caratteri che si ha intenzione di utilizzare per il file aperto come, ad esempio, UTF-8:
# Specificare modalitร di accesso e codifica di un file
>>> open("text.txt",mode = 'r',encoding = 'utf-8')
<_io.TextIOWrapper name='text.txt' mode='r' encoding='utf-8'>
Soprattutto nel caso in cui si debbano gestire piรน file รจ poi utile associare lโinformazione relativa alla loro apertura ad una variabile, questo ne renderร piรน semplice la manipolazione e il codice risulterร piรน leggibile:
# Associare l'apertura di un file ad una variabile
>>> f = open("text.txt",mode = 'r',encoding = 'utf-8')
Chiudere un file
Dopo aver aperto e manipolato un file รจ buona norma chiuderlo in modo da liberare le risorse occupate e restituirle al sistema su cui si sta operando. Per far questo abbiamo a disposizione la funzione close() da utilizzare come segue:
# Chiusura di un file con Python
>>> f = open("text.txt")
>>> f.close()
"close()" perรฒ non garantisce la chiusura del file nel caso in cui le operazioni precedentemente in corso vengano coinvolte in dei malfunzionamenti producendo degli errori. Per assicurarsi una chiusura indipendentemente da qualsiasi evento รจ quindi consigliabile ricorrere alla clausola with che consente di non esplicitare la chiamata a "close()":
# Chiusura di un file con with
>>> with open("text.txt") as f:
Da ricordare che per uscire dal flusso di lavoro inizializzato da "with", e passare nuovamente ai comandi della shell, รจ necessario premere due volte sul pulsante [Invio].
Scrivere un file con Python
La principale modalitร di accesso in scrittura dei file in Python รจ "w", si tratta di unโopzione particolarmente comoda perchรฉ come, abbiamo visto in precedenza, consente di creare un file nel caso in cui non esista. Digitiamo ad esempio il seguente comando:
# Creazione e apertura in scrittura di un file con Python
>>> open("nuovo_file.txt",'w')
<_io.TextIOWrapper name='nuovo_file.txt' mode='w' encoding='cp1252'>
"w" รจ una modalitร che va utilizzata con una certa attenzione perchรฉ nel caso in cui un file presenti giร del contenuto questo verrร sovrascritto.
Per scrivere in un file aperto in scrittura รจ disponibile la funzione write() a cui passare come argomento la stringa da inserire:
# Scrivere in un file con Python
>>> with open("prova.txt",'w',encoding = 'utf-8') as f:
f.write("Prima riga\n")
f.write("Seconda riga\n")
f.write("Terza riga\n")
Da notare lโuso del simbolo "\n" (o newline), che permette di andare a capo dopo una riga.
Leggere un file con Python
Per leggere un file con Python si utilizza la funzione read() a cui passare come argomento il numero di caratteri da leggere. Se ad esempio volessimo leggere i primi 8 caratteri (spazi inclusi) del testo del file precedentemente scritto dovremmo operare in questo modo:
# Leggere un file con Python
>>> with open("prova.txt",'r',encoding = 'utf-8') as f:
f.read(8)
'Prima ri'
Evitando di specificare il parametro verrร restituito lโintero contenuto del file:
# Leggere un file con Python
>>> with open("prova.txt",'r',encoding = 'utf-8') as f:
f.read()
'Prima riga\nSeconda riga\nTerza riga\n'
Nel caso in cui "read()" venga utilizzato dopo "read(n)", la lettura comincerร dal carattere successivo a quello visualizzato tramite questโultima e continuerร fino allโultimo carattere del testo.