back to top

Gestire i file con Python

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.

Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.
Articolo precedente
Articolo successivo