Cookie di statistica e di pubblicità
Usiamo cookie di statistica e di pubblicità, entrambi inviati a Google. Rifiutare non cambia niente di quello che vedi.Leggi la pagina sulla privacy
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.
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.
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.
È 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Estensione | .csv |
|---|---|
| Tipo di media | text/csv |
| Prima pubblicazione | 1972 |
| Specifica | RFC 4180 |
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.
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.
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.
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.
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.
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.