Capitolo 8: I/O su file
Impara a leggere e scrivere file di testo, CSV e binari da console usando Python.
Scaricachapter8.py
Obiettivi
- Aprire file in modalità testo e binaria per lettura e scrittura.
- Leggere l’intero file, riga per riga o a blocchi.
- Scrivere dati di testo e binari, usare
writelines()
. - Usare il modulo
csv
per analizzare e generare file CSV. - Gestire i file in sicurezza con context manager (
with
).
1. Lettura di file di testo
Apri in modalità lettura ('r'
) e poi:
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read() # intero file come stringa
lines = f.readlines() # lista di righe
f.seek(0) # torna all’inizio
for line in f: # itera riga per riga
print(line.strip())
2. Scrittura di file di testo
Apri in modalità scrittura ('w'
) o aggiunta ('a'
):
lines = ["Prima riga\n", "Seconda riga\n"]
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Intestazione\n")
f.writelines(lines) # scrive più righe in una volta
Modalità:
Modalità | Descrizione |
---|---|
'r' | Lettura (default), il file deve esistere |
'w' | Scrittura, tronca o crea |
'a' | Aggiunta, crea se non esiste |
'r+' | Lettura/scrittura |
'b' suffisso | Modalità binaria |
3. Gestione file CSV
Usa il modulo integrato csv
:
a) Lettura CSV
import csv
with open("records.csv", newline="", encoding="utf-8") as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row) # ogni riga è una lista di stringhe
b) Scrittura CSV
import csv
rows = [["Nome","Età"], ["Alice","30"], ["Bob","25"]]
with open("out.csv", "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerows(rows)
4. I/O su file binari
Apri in modalità binaria ('rb'
, 'wb'
):
# Leggi byte immagine
with open("image.png", "rb") as fin:
data = fin.read()
# Scrivi byte su nuovo file
with open("copy.png", "wb") as fout:
fout.write(data)
Esercizi
- Crea un file di testo con dieci righe, poi scrivi uno script per contare e stampare il numero di righe.
- Costruisci un file CSV di prodotti (nome, prezzo), poi leggilo e calcola il costo totale.
- Scrivi una funzione per aggiungere una voce di log con timestamp a un file di log.
- Copia un file binario (esempio: un’immagine) da sorgente a destinazione usando blocchi.