Capitolo 8: I/O su file

Impara a leggere e scrivere file di testo, CSV e binari da console usando Python.

Scarica chapter8.py

Obiettivi

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' suffissoModalità 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

  1. Crea un file di testo con dieci righe, poi scrivi uno script per contare e stampare il numero di righe.
  2. Costruisci un file CSV di prodotti (nome, prezzo), poi leggilo e calcola il costo totale.
  3. Scrivi una funzione per aggiungere una voce di log con timestamp a un file di log.
  4. Copia un file binario (esempio: un’immagine) da sorgente a destinazione usando blocchi.