Gestione Di File E I O
Lezione: Gestione di file e I/O¶
Obiettivi della Lezione¶
Al termine di questa lezione, sarai in grado di:
- Comprendere i concetti fondamentali della gestione dei file in Python.
- Aprire e chiudere file utilizzando diverse modalità.
- Leggere da e scrivere su file di testo.
- Utilizzare il costrutto
with
per una gestione sicura dei file. - Gestire eccezioni comuni durante le operazioni di I/O.
- Applicare le buone pratiche nella manipolazione dei file.
Introduzione¶
La gestione dei file è una componente essenziale nello sviluppo di applicazioni Python. Che tu stia leggendo dati da un file di configurazione, scrivendo risultati di un’elaborazione o manipolando file binari, la capacità di interagire con il filesystem è fondamentale. In questa lezione, esploreremo come Python semplifica le operazioni di input/output (I/O) su file, consentendoti di leggere, scrivere e gestire file in modo efficiente e sicuro.
file = open('nome_file', 'modalità')
nome_file
: il nome o il percorso del file.modalità
: la modalità in cui aprire il file (ad es. lettura, scrittura).
Modalità di Apertura¶
Le modalità comuni sono:
'r'
: Lettura (read) – predefinita. Il file deve esistere.'w'
: Scrittura (write) – crea un nuovo file o sovrascrive uno esistente.'a'
: Aggiunta (append) – scrive alla fine del file esistente.'rb'
/'wb'
/'ab'
: Come sopra, ma in modalità binaria.'r+'
: Lettura e scrittura.
Chiudere un File¶
È importante chiudere il file dopo aver terminato le operazioni per liberare le risorse:
file.close()
Il Costrutto with
¶
Per gestire automaticamente l’apertura e la chiusura dei file, si utilizza il costrutto with
:
with open('nome_file', 'modalità') as file:
# operazioni sul file
Al termine del blocco with
, il file viene chiuso automaticamente.
Lettura di File¶
file.read(size)
: Legge l’intero file o un numero specifico di caratteri.file.readline()
: Legge una singola riga.file.readlines()
: Legge tutte le righe e le restituisce come una lista.
Scrittura su File¶
file.write(stringa)
: Scrive una stringa nel file.file.writelines(lista_di_stringhe)
: Scrive una lista di stringhe nel file.
# Apri il file in modalità lettura
with open('esempio.txt', 'r') as file:
contenuto = file.read()
print(contenuto)
Spiegazione:
- Utilizziamo
with
per aprireesempio.txt
in modalità lettura. file.read()
legge l’intero contenuto del file.- Il contenuto viene stampato sullo schermo.
- Non è necessario chiamare
file.close()
; il costruttowith
si occupa di chiudere il file.
2. Scrittura su un File di Testo¶
# Apri il file in modalità scrittura
with open('output.txt', 'w') as file:
file.write('Ciao mondo!n')
file.write('Questa è una seconda riga.n')
Spiegazione:
- Il file
output.txt
viene aperto in modalità scrittura. - Se
output.txt
non esiste, verrà creato; se esiste, il suo contenuto verrà sovrascritto. file.write()
scrive le stringhe nel file.
3. Lettura Linea per Linea¶
with open('esempio.txt', 'r') as file:
for linea in file:
print(linea.strip())
Spiegazione:
- Iteriamo attraverso ogni linea del file.
linea.strip()
rimuove spazi bianchi all’inizio e alla fine, inclusi i caratteri di nuova linea.
4. Aggiunta di Contenuto a un File Esistente¶
# Apri il file in modalità aggiunta
with open('output.txt', 'a') as file:
file.write('Aggiungiamo una nuova riga.n')
Spiegazione:
- Il file viene aperto in modalità append (‘a’).
- Il nuovo contenuto viene aggiunto alla fine del file senza sovrascrivere il contenuto esistente.
5. Gestione di File Binari¶
Per leggere o scrivere file binari (come immagini o file eseguibili):
# Lettura di un file binario
with open('immagine.jpg', 'rb') as file:
dati = file.read()
# Scrittura di un file binario
with open('copia.jpg', 'wb') as file:
file.write(dati)
Spiegazione:
- Utilizziamo
'rb'
per leggere in modalità binaria e'wb'
per scrivere. - I dati vengono letti e scritti come oggetti
bytes
.
contatore = 0
with open('documento.txt', 'r') as file:
for linea in file:
contatore += 1
print(f'Il file contiene {contatore} linee.')
Esercizio 2: Creare un File di Log¶
Crea un programma che chieda all’utente di inserire delle note. Ogni nota deve essere aggiunta a un file chiamato log.txt
con un timestamp.
Soluzione:
import datetime
nota = input('Inserisci una nota: ')
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('log.txt', 'a') as file:
file.write(f'[{timestamp}] {nota}n')
print('Nota salvata in log.txt')
Inserisci una nota: il mio primo log Nota salvata in log.txt
Esercizio 3: Copiare il Contenuto di un File¶
Scrivi un programma che copi il contenuto di sorgente.txt
in un nuovo file chiamato destinazione.txt
.
Soluzione:
with open('sorgente.txt', 'r') as sorgente:
contenuto = sorgente.read()
with open('destinazione.txt', 'w') as destinazione:
destinazione.write(contenuto)
print('File copiato con successo.')
Buone Pratiche e Consigli¶
- Usa sempre il costrutto
with
: Garantisce che i file vengano chiusi correttamente, evitando perdite di risorse. Gestisci le eccezioni: Prevedi possibili errori come la mancanza del file o problemi di permessi.
try: with open('file.txt', 'r') as file: contenuto = file.read() except FileNotFoundError: print('Il file non esiste.') except IOError: print('Errore di I/O.')
Attento alle modalità di apertura: Utilizza la modalità corretta per evitare di sovrascrivere accidentalmente i dati.
- Chiudi i file: Se non usi
with
, assicurati di chiamarefile.close()
. - Lavora con percorsi assoluti: Aiuta a evitare problemi di file non trovati.
Conclusione¶
In questa lezione, abbiamo esplorato come Python gestisce le operazioni di input/output su file. Abbiamo imparato ad aprire, leggere, scrivere e chiudere file utilizzando diverse modalità e a utilizzare il costrutto with
per una gestione sicura. Comprendere la gestione dei file è fondamentale per sviluppare applicazioni che interagiscono con dati persistenti, log, configurazioni e molto altro.
Risorse Aggiuntive¶
- Documentazione Ufficiale Python: Reading and Writing Files
- Libro Consigliato: Python Crash Course di Eric Matthes
- Video Tutorial: Reading and Writing to Files