CSV

Che cos’è un file CSV?

Una tabella in testo semplice. La legge qualsiasi foglio di calcolo, qualsiasi banca dati e qualsiasi strumento di analisi. Attenzione: qui Excel separa con il punto e virgola.

Che cos’è CSV

CSV è un formato di testo semplice che si apre in qualsiasi editor. Si usa per spostare dati fra programmi.

L’estensione è .csv e il nome per esteso è Comma-Separated Values. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.

Da dove viene CSV

Risale al 1972. La specifica è RFC 4180.

A un formato rimasto leggibile così a lungo si può affidare qualcosa che vuoi ritrovare fra dieci anni.

La specifica è pubblica

È pubblicata per intero, quindi la si può implementare partendo dal documento invece che per osservazione: è per questo che il formato compare in così tanti programmi, ed è per questo che file scritti vent’anni fa si aprono ancora. Una specifica pubblicata però non è la stessa cosa di una esente da royalty: dove un formato incapsula un codec, le licenze sui brevetti restano una questione a parte che lo standard non risolve.

Non si butta via niente

CSV conserva il suo contenuto esattamente. Risalvarlo non cambia nulla, quindi puoi aprirlo, modificarlo e risalvarlo quante volte vuoi senza accumulare danni: è questo che ne fa un formato di lavoro e non di consegna.

Non c’è dove lasciare una nota

CSV non ha una sintassi per i commenti. Tutto ciò che spiega deve vivere fuori dal file, ed è bene saperlo prima di sceglierlo per qualcosa che una persona modificherà a mano.

Che cosa apre CSV

Microsoft Excel, LibreOffice Calc e pandas lo leggono, e così fanno quasi tutti i programmi dello stesso tipo.

Quando un file non si apre, il formato è raramente il problema: più spesso è il programma a essere più vecchio di lui. Convertire in qualcosa di più vecchio è la via d’uscita affidabile, ed è a questo che serve il resto di questo sito.

Aprirlo nel browser

Nessun browser lo legge.

È di gran lunga il motivo più comune per convertirlo: non che il formato sia scadente, ma che il posto in cui vuoi mostrare il file non sappia leggerlo.

È un formato di lavoro

CSV è pensato per essere aperto e modificato. Tieni il file in questo formato per tutto il tempo in cui il lavoro va avanti, ed esporta da lì ogni volta che serve una copia finita.

Che cosa va storto con lui

Le lamentele ricorrenti: i tipi delle colonne vengono indovinati all’importazione invece che dichiarati.

Nessuna di queste è un motivo per evitare il formato. Sono le cose che conviene conoscere prima che una di loro ti sorprenda, che è un’affermazione diversa e più utile.

Il formato più semplice che non è semplice

Un CSV è righe di valori separati da virgole, e questa descrizione regge finché il primo valore non contiene una virgola. Allora serve mettere fra virgolette, e i valori fra virgolette hanno bisogno di un modo per contenere un carattere di virgolette, e i valori hanno bisogno di un modo per contenere un ritorno a capo — e ognuna di queste regole è dove le implementazioni cominciano a non essere d’accordo.

La RFC 4180 è stata pubblicata nel 2005 per mettere per iscritto le convenzioni, ed è esplicita nel dire che documenta una prassi esistente piuttosto che definire uno standard che tutti devono seguire. Vent’anni dopo, molto software ancora non la segue. È il punto di partenza onesto: il CSV è una famiglia di formati quasi compatibili che indossano un’unica estensione.

Le virgolette sono la parte che rompe davvero i file

Un valore che contiene una virgola, un carattere di virgolette o un ritorno a capo deve essere avvolto fra doppie virgolette, e una virgoletta dentro un valore del genere si scrive due volte. Fatelo bene e un valore può contenere qualunque cosa, incluso un intero paragrafo con ritorni a capo dentro.

Fatelo male e il danno è silenzioso. Una virgoletta non sfuggita fa sì che un parser inghiotta il resto del file in un solo campo. Una virgola dentro un indirizzo non fra virgolette sposta ogni colonna successiva di uno, per quella riga soltanto — quindi un file di diecimila righe può essere corretto tranne le undici che menzionavano un’azienda con una virgola nel nome, e nulla segnala un errore.

Il separatore spesso non è una virgola

Nei paesi dove il separatore decimale è la virgola — gran parte dell’Europa continentale, Italia compresa — i fogli di calcolo esportano con il punto e virgola, perché un file pieno di «1,50» sarebbe altrimenti inanalizzabile. L’estensione resta comunque .csv.

Il tabulatore è la terza scelta comune ed è il motivo per cui esiste il TSV, dato che un tabulatore quasi mai compare dentro un valore. Se un CSV si apre come una sola colonna, il separatore è la prima cosa da controllare: il file va bene e il lettore ha indovinato male. La maggior parte delle finestre di importazione permette di dire quale carattere usare, e la maggior parte delle finestre di esportazione permette di sceglierlo.

Tutto è testo finché qualcosa non decide altrimenti

Un CSV non ha tipi. I caratteri 0 0 1 2 3 stanno nel file, e se diventano il numero 123 o il testo «00123» lo decide interamente chi li legge.

È la radice di tutta la famiglia di lamentele sui fogli di calcolo che mangiano i dati: gli zeri iniziali che spariscono dai CAP, i codici prodotto che diventano date, gli identificativi lunghi che perdono le ultime cifre alla virgola mobile. Nulla di tutto ciò è nel file. Succede all’apertura, e la difesa è importare invece di aprire, dichiarando le colonne scomode come testo.

La codifica, e i tre byte invisibili

Un CSV non porta alcuna dichiarazione della propria codifica dei caratteri. UTF-8 è la scelta predefinita sensata ed è ciò che quasi tutto scrive oggi; Excel su Windows in passato presumeva invece una tabella codici regionale, motivo per cui un’esportazione piena di caratteri accentati si apre come geroglifici.

Il rimedio abituale è scrivere un byte order mark — tre byte invisibili che dicono a Excel che il file è UTF-8. Funziona, e crea un problema diverso: molti parser vedono poi quei byte come parte della prima intestazione di colonna, quindi un confronto con «id» fallisce in silenzio. Non c’è un assetto che accontenti entrambi, il che è un buon riassunto del formato nel suo insieme.

In cosa il CSV è genuinamente eccellente

Lo streaming. Un file più grande della memoria disponibile può essere letto riga per riga da uno strumento che non tiene mai più di una linea, ed è il motivo per cui le pipeline di dati, gli import di database e le utility a riga di comando lo parlano tutti, e per cui un’esportazione da cinque gigabyte resta gestibile.

E la trasparenza. È testo, quindi nulla può nascondersi dentro — nessuna macro, nessun collegamento esterno, nessuna formula che raggiunge altri file. È esattamente per questo che i sistemi attenti alla sicurezza chiedono CSV invece di una cartella di lavoro, ed è una proprietà reale, non una consolazione.

Scriverne uno che qualcun altro possa leggere

Cinque abitudini prevengono quasi ogni problema. Usare UTF-8 senza byte order mark. Mettere fra virgolette ogni campo che potrebbe contenere il separatore, una virgoletta o un ritorno a capo — o semplicemente mettere tutto fra virgolette, il che è legale ed economico. Usare una riga di intestazione con nomi brevi e non ambigui. Scrivere le date in forma ISO, con l’anno per primo, che si ordina correttamente e non si può leggere male come americana o europea. E dire quale separatore avete usato se non è una virgola.

Niente di tutto ciò è imposto da alcunché, il che è il motivo per cui vale la pena farlo deliberatamente. Un CSV che segue queste cinque regole si apre correttamente in ogni strumento che lo riceverà mai.

I dati, in un posto solo

Identificativi e provenienza del formato CSV.
Estensione.csv
Tipo di mediatext/csv
Prima pubblicazione1972
SpecificaRFC 4180

File CSV: domande frequenti

Perché il mio CSV si apre come una sola colonna?

Il separatore non è quello che il lettore si aspettava — spesso un punto e virgola, che i fogli di calcolo nei paesi con la virgola decimale esportano per impostazione predefinita, oppure un tabulatore. Il file va bene; usate la finestra di importazione per dire quale carattere separa i valori.

Perché Excel toglie gli zeri iniziali?

Un CSV non ha tipi, quindi Excel ne indovina uno per colonna e tratta un codice fatto di cifre come un numero. Importate il file — Dati, poi Da testo/CSV — e impostate quelle colonne come Testo prima di caricarle, oppure inviate un XLSX, dove i tipi sono dichiarati.

Come metto una virgola dentro un valore?

Avvolgete il valore fra doppie virgolette. Una virgoletta dentro un valore fra virgolette si scrive due volte. Fatto correttamente, un campo può contenere virgole, virgolette e perfino ritorni a capo; fatto male, ogni colonna successiva si sposta di uno e nulla segnala l’errore.

Perché i caratteri accentati sono sbagliati?

Il file non porta alcuna dichiarazione di codifica e il lettore ha indovinato. Salvate in UTF-8; per Excel su Windows un byte order mark aiuta, al costo che altri parser vedano quei tre byte come parte della prima intestazione di colonna.

Il CSV è uno standard?

La RFC 4180 documenta le convenzioni comuni e dice esplicitamente che descrive una prassi esistente piuttosto che definire uno standard. Molto software ancora se ne discosta, ed è per questo che il CSV va pensato come una famiglia di formati quasi compatibili.

Qual è la differenza fra CSV e TSV?

Il separatore. Il TSV usa i tabulatori, che quasi mai compaiono dentro un valore, quindi le virgolette servono di rado e tutta la classe di problemi della virgola dentro un campo sparisce. È la scelta più sicura quando entrambe le parti concordano di usarlo.