Vai al contenuto principale

Python: scrivere su file. Come lavorare in sicurezza con file di testo, CSV e JSON

Impara a scrivere su file in Python usando gli strumenti integrati, pattern comuni e best practice per applicazioni reali.
· 7 min leggi

Scopri con l'IA

Prima o poi, ogni programma Python deve salvare qualcosa: log, risultati, input dell’utente, file di configurazione o dati elaborati. Potresti esportare i risultati di un’analisi, registrare cosa ha fatto il tuo script o mantenere lo stato dell’app tra un’esecuzione e l’altra. In ogni caso, scrivere su file è una competenza fondamentale di Python che userai di continuo.

In questa guida imparerai a scrivere su file in Python usando la libreria standard. Partiremo dalle basi, poi vedremo le modalità di apertura, le codifiche, i formati strutturati come JSON e CSV e pattern pronti per la produzione che rendono il codice più sicuro e prevedibile. Alla fine saprai scrivere file con sicurezza in applicazioni reali, non solo in esempi da manuale.

Se hai già dimestichezza con le basi di Python, questo tutorial ti aiuta a colmare il divario tra script e gestione dei file a livello professionale. Se vuoi rinforzare i fondamentali man mano che procedi, i nostri corsi Introduction to Python e Intermediate Python si abbinano bene a questa guida.

Per iniziare: la tua prima scrittura su file in Python

Il modo più rapido per capire come si scrive su file in Python è farlo davvero. Partiamo dall’esempio più semplice e costruiamo da lì.

Il pattern di base (passo dopo passo)

Alla base, scrivere su un file segue un pattern semplice:

  1. Apri un file
  2. Scrivici del contenuto
  3. Chiudi il file

Python fornisce la funzione integrata open() per gestire il primo passo.

La funzione open(), spiegata in modo semplice

La funzione open() collega il tuo codice Python a un file su disco. Le dici due cose:

  • Con quale file vuoi lavorare
  • Come vuoi lavorarci

Per la scrittura, la modalità più comune è "w", che significa write. Se il file non esiste, Python lo crea. Se esiste, Python lo sovrascrive.

file = open("example.txt", "w")
file.write("Hello, world!")
file.close()

Esegui questo script e Python crea un file chiamato example.txt nella stessa cartella del tuo codice.

Cosa è appena successo?

  • open("example.txt", "w") apre o crea il file

  • write() invia del testo nel file

  • close() svuota i buffer e rilascia il file

Funziona, ma non è il modo in cui dovresti scrivere file sul lungo periodo.

Il modo giusto in Python: usare i context manager

Aprire e chiudere i file manualmente è facile da dimenticare e da sbagliare. Per questo Python incoraggia l’uso dei context manager.

Perché with è meglio: usare with garantisce che il file venga sempre chiuso correttamente, anche se qualcosa va storto durante la scrittura. Rende il codice più sicuro e più leggibile.

with open("example.txt", "w") as file:
    file.write("Hello, world!")

Quando il blocco with finisce, Python chiude automaticamente il file. Questo pattern è ovunque nel codice Python professionale ed è da tenere a mente. Lo vedrai ripetutamente nel nostro skill track Python Programming e nel corso Writing Clean Python Code.

Un esempio di scrittura su file in Python

Applichiamolo a qualcosa di un po’ più realistico. Qui creerò una voce di diario giornaliera.

from datetime import date

today = date.today().isoformat()

with open("journal.txt", "a", encoding="utf-8") as file:
    file.write(f"{today}: Practiced writing files in Python.\n")

Qui introduciamo due idee importanti:

  • Modalità append ("a")

  • Scrivere voci strutturate e ripetibili

  • Ogni esecuzione aggiunge una nuova riga senza eliminare le voci precedenti.

Capire le modalità di apertura: quando usare w, a, x e r+

Una volta che sai come scrivere su un file, la decisione più importante diventa come aprirlo. Le modalità di apertura controllano se i dati vengono sovrascritti, preservati o protetti.

Modalità scrittura (w): partire da zero

La modalità write crea un file se non esiste. Se esiste, lo sovrascrive.

with open("report.txt", "w") as file:
    file.write("Daily sales report\n")

Usala quando vuoi una base pulita. Attenzione perché questa modalità elimina i dati esistenti senza avvisi.

Modalità append (a): aggiungere senza perdere dati

La modalità append aggiunge contenuto alla fine di un file.

with open("activity.log", "a") as file:
    file.write("User logged in\n")

È ideale per log e registri incrementali ed è una delle modalità più sicure in produzione.

Modalità esclusiva (x): creazione sicura del file

La modalità esclusiva crea un file solo se non esiste già.

try:
    with open("config.txt", "x") as file:
        file.write("initialized=true")

except FileExistsError:
    print("File already exists.")

Utile per script di setup in cui la sovrascrittura sarebbe rischiosa.

Modalità lettura-scrittura (r+): modificare file esistenti

Questa modalità consente lettura e scrittura ma richiede che il file esista.

with open("notes.txt", "r+") as file:
    content = file.read()
    file.write("\nNew note added.")

La scrittura avviene alla posizione corrente del puntatore del file, perciò qui è importante capire come si muove il cursore.

Quale modalità dovresti usare? Ecco la mia guida mentale:

  • Sovrascrivere dati esistenti → w

  • Conservare i dati e aggiungerne altri → a

  • Evitare sovrascritture → x

  • Leggere e aggiornare lo stesso file → r+

Per rinforzare visivamente questo processo decisionale:

python write to file how to

La scelta della modalità giusta in genere si riduce all’intento: sovrascrivere, accodare, proteggere o modificare.

Scrivere diversi tipi di contenuto in Python

Una volta che sai aprire i file con la modalità corretta, la domanda successiva è cosa stai effettivamente scrivendo.

Nei programmi reali non scrivi sempre una singola stringa. Potresti salvare liste, esportare risultati o lavorare con dati non testuali come immagini o PDF. In questa sezione imparerai a scrivere in modo sicuro ed efficiente diversi tipi di contenuto.

Scrivere testo e stringhe

Il caso più semplice è scrivere testo semplice. Python ti offre due metodi principali: write() e writelines().

write() scrive esattamente ciò che passi, senza a capo automatici.

with open("example.txt", "w") as file:
    file.write("First line\n")
    file.write("Second line\n")

write() vs. writelines()

La differenza chiave è semplice: write() scrive una stringa alla volta, mentre writelines() scrive una sequenza di stringhe così com’è; writelines() non aggiunge a capo per te, quindi ogni elemento deve già terminare con \n.

In pratica, molti sviluppatori preferiscono comunque write() in un ciclo perché più leggibile.

lines = ["One\n", "Two\n", "Three\n"]

with open("example.txt", "w") as file:
    file.writelines(lines)

Scrivere liste in modo efficiente

items = ["apple", "banana", "cherry"]

content = "\n".join(items)

with open("fruits.txt", "w") as file:
    file.write(content)

Fare il join prima riduce le scritture ripetute su disco, cosa che conta con dataset più grandi.

Scrivere dati binari

La modalità binaria ("wb") è necessaria per i file non testuali.

binary_data = b"\x89PNG\r\n\x1a\n"

with open("image.bin", "wb") as file:
    file.write(binary_data)

Lavorare con le codifiche in Python (perché il tuo testo appare corrotto)

I problemi di codifica sono tra i bug più comuni — e frustranti — nella gestione dei file.

Specifica sempre UTF-8

Una codifica esplicita evita problemi tra piattaforme e caratteri corrotti, come puoi vedere qui:

with open("example.txt", "w", encoding="utf-8") as file:
    file.write("Café, résumé, naïve")

Esempio reale: testo multilingue

Essere espliciti qui ti risparmia ore di debug più avanti. Ecco cosa intendo:

customers = ["Ana García", "François Dupont", "Miyuki 山田"]

with open("customers.txt", "w", encoding="utf-8") as file:
    for name in customers:
        file.write(name + "\n")

Tecniche avanzate di scrittura in Python

Una volta che ti senti a tuo agio a scrivere file in Python, i problemi successivi di solito non riguardano come scrivere, ma come farlo in modo sicuro ed efficiente. File grandi, crash imprevisti e colli di bottiglia prestazionali introducono casi limite che non abbiamo ancora trattato.

Gestire file grandi con scritture a blocchi

Lo streaming dell’output mantiene basso l’uso di memoria:

def generate_lines():
    for i in range(1_000_000):
        yield f"Line {i}\n"

with open("large.txt", "w", encoding="utf-8") as file:
    for line in generate_lines():
        file.write(line)

Scritture atomiche: prevenire la corruzione

L’idea qui è evitare scritture parziali se un programma si arresta a metà aggiornamento.

import os, tempfile

def atomic_write(path, content):
    with tempfile.NamedTemporaryFile("w", delete=False) as tmp:
        tmp.write(content)
    os.replace(tmp.name, path)

Oltre i file di testo: scrivere JSON e CSV

Quando i tuoi dati hanno struttura, il testo semplice smette di essere l’opzione migliore. Python semplifica la scrittura di formati strutturati comuni come JSON e CSV, così puoi archiviare i dati in un modo più facile da condividere, ispezionare ed elaborare in seguito.

Scrivere JSON

Quando lavori con dizionari o dati annidati, JSON è di solito il formato più naturale da usare. Il modulo json integrato in Python gestisce la conversione per te, così non devi formattare manualmente le stringhe.

import json

data = {"id": 1, "name": "Jeremiah"}

with open("user.json", "w", encoding="utf-8") as file:
    json.dump(data, file, indent=2)

Scrivere CSV

Se i tuoi dati sono tabellari e probabilmente verranno aperti in fogli di calcolo o strumenti BI, il CSV è una scelta migliore. Il modulo csv ti aiuta a scrivere le righe in sicurezza senza preoccuparti di delimitatori o virgolette.

import csv

rows = [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]

with open("users.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["id", "name"])
    writer.writeheader()
    writer.writerows(rows)

Errori comuni quando si scrive su file in Python

Anche se scrivere file in Python è semplice, pochi piccoli errori causano la maggior parte dei problemi reali. Di solito non si tratta di sintassi; derivano da dettagli trascurati come gestione delle risorse, modalità del file o scelte prestazionali.

Tieni a mente i seguenti punti.

  • Dimenticare di chiudere i file → usa ‘with’

  • Sovrascrivere dati involontariamente → ricontrolla le modalità

  • Ignorare la codifica → specifica sempre UTF-8

  • Scrivere file grandi in modo inefficiente → fai batch o esegui lo streaming dell’output

La maggior parte dei bug qui deriva da piccole sviste, non da logica complessa.

Conclusione

Scrivere su file in Python parte in modo semplice, ma i programmi reali richiedono più attenzione. In questa guida sei passato dalla tua prima scrittura su file alla scelta di modalità sicure, alla gestione corretta delle codifiche, all’esportazione di dati strutturati e all’applicazione di pattern pronti per la produzione.

La lezione chiave è l’intento: scegli la modalità giusta, sii esplicito sulla codifica e scrivi in modo difensivo quando i dati contano.

Oluseye Jeremiah

Autore

Oluseye Jeremiah

Technical writer specializzato in AI, ML e data science: rende idee complesse chiare e accessibili.

FAQ

Python può scrivere file in modo asincrono?

Sì, con librerie come aiofiles, anche se la maggior parte degli script non ne ha bisogno.

Qual è la modalità di scrittura più sicura?

Append ("a") o esclusiva ("x") a seconda dell’intento.

Perché il mio testo è corrotto?

Mismatch di codifica: usa sempre UTF-8.

Dove viene salvato il mio file?

Rispetto alla directory di lavoro dello script.

Dovrei usare pathlib?

Sì, per una gestione dei percorsi più pulita e multipiattaforma.

Argomenti

Correlato