Pagine

giovedì 8 dicembre 2011

Python ed i CSV

Premessa


I CSV sono semplicissimi files di testo e sono un primo esempio di database sebbene con delle limitazioni. L'acronimo significa Comma Separated Value ovvero "Valori Separati da una Virgola". In sostanza un file CSV si può aprire con qualsiasi editor di "testo semplice" in qualsiasi sistema operativo e si presenta come qualcosa del genere:

Essi, come detto prima, sono un primo esempio di database sebbene la struttura non possa essere complessa data la natura del supporto.

 

Vantaggi e svantaggi nell'uso dei CSV


I database ma anche un semplice foglio di calcolo, offrono performance, personalizzazioni, decisamente maggiori rispetto ai CSV.
Per questi motivi molte persone pensano, a torto, che il sistema CSV, data la sua semplicità intrinseca sia ormai obsoleto.
Ma allora chi usa e perchè viene usato questo formato?
I CSV, a mio avviso, hanno due enormi vantaggi.
Da una parte permettono di immagazzinare quantità abnormi di dati: un foglio di Excel, ad esempio, ha un limite numerico di righe e colonne mentre CSV non soffre di questo limite: esso può immagazzinare "virtualmente" infinite colonne ed infinite righe. 
Ovviamente il limite esiste ma dipende dalla memoria RAM e dal file system e non dal supporto in sè.
L'altro vantaggio è la portabilità del formato: la maggior parte dei fogli di calcolo (si pensi MS Excel) e server sql (si pensi ad AS400 o MS SQLServer) sono proprietari e girano su uno o pochi sistemi operativi; i CSV, al contrario, essendo file di testo possono essere letti e scritti da qualsiasi software su qualsiasi sistema operativo: questo fattore li rende degli alleati insostituibili che permettono il dialogo tra sistemi anche estremamente differenti tra loro.
Facciamo, dunque, uno schemino in breve dei vantaggi/svantaggi.
Partiamo ad evidenziarne gli svantaggi:
  • non gestisce le relazioni fra tabelle
  • non permette la creazione di viste, stored procedure e tutte le altre facilitazioni proprie dei server sql
  • non permette la gestione della multiutenza: può accedere solo un programma/persona per volta.
E, successivamente i vantaggi:
  • formato universale: si possono leggere e scrivere file CSV con qualsiasi software su qualsiasi sistema operativo
  • permette di gestire "infinite" quantità di dati senza limiti di colonne (campi) e/o righe (record).

 

Dialetti

Ciascun CSV può differenziarsi per il "dialetto" utilizzato.
Un dialetto viene identificato, prevalentemente da tre parametri:
  1. il separatore tra un campo e l'altro: in America è di default la virgola (,) e da qui il nome "Comma". Nei paese non anglosassoni, Italia inclusa, poichè la virgola è il separatore tra le cifre decimali di un numero, si utilizza il punto e virgola (;) come nell'esempio precedente.
  2. il separatore tra un record e l'altro: solitamente ogni volta che si va a capo, si identifica un nuovo record. Questa scelta generalmente accettata da tutti può, all'occorrenza, essere modificata con un altro carattere. Si ricorda che il carattere a capo è identificato da "\n" su linux/unix e da "\r\n" sui sistemi windows.
  3. il quoting: ci si riferisce alle virgolette singole (') o le virgolette doppie ("); vengono utilizzate per racchiudere un testo. Sono particolarmente utili quando si pensa di voler utilizzare all'interno di un campo anche il separatore.
Una delle prime cose da fare, dunque, quando si lavora con i CSV in python è definire il dialetto che viene utilizzato.
Il modulo CSV ha già un paio di dialetti preimpostati che sono quelli utilizzati da excel ma, all'uopo, se ne può impostare di personalizzati.

 

Script di esempio

Prima di creare questo script devi creare il file dati.csv e dati2.csv con le seguenti righe.
Dati.csv:


Dat2.csv


Ed infine lo script:

1 commento:

  1. Salve, ho letto con piacere il suo articolo, mi sto immergendo da poco nel python, e avevo bisogno di trovare una soluzione per convertire una colonna specifica in riga, da un file sorgente ad un secondo file di output, ma non so come iniziare.

    grazie

    RispondiElimina