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