Modulo CSV
Il modulo csv è un modulo della libreria predefinita che serve per trattare i file in formato CSV (Comma Separated Value).
Il CSV è un formato di testo utilizzato per l'importazione ed esportazione di una tabella di dati da fogli elettronici o da basi di dati. Essere in grado di manipolarlo ci permette dunque di migliorare di molto (ma con poco sforzo) le nostre attuali capacità di programmatori!
Per fare un esempio semplice con il formato CSV, immaginate di voler memorizzare la seguente tabella dati:
| Nome | Ruolo | Squadra |
|---|---|---|
| Maradona | Centrocampista | Napoli |
| Gullit | Attaccante | Milan |
| Brehme | Difensore | Inter |
| Falcao | Centrocampista | Roma |
Ogni riga della tabella nel formato CSV termina quando si va a capo. Ogni colonna della tabella termina con una virgola. Da cui si ottiene:
Nome,Ruolo,Squadra
Maradona,Centrocampista,Napoli
Gullit,Attaccante,Milan
Brehme,Difensore,Inter
Falcao,Centrocampista,Roma
Mi sembra molto semplice da capire :)
Note
Il modulo CSV permette di caricare in maniera automatica i dati estratti in strutture dati che noi ben conosciamo: i dizionari!
Da tutte queste considerazioni insieme capite la necessità di studiare
questo modulo. Per caricare i dati da un file csv si può semplicemente
utilizzare la funzione DictReader() del modulo CSV, che carica ogni
riga del file (successiva alla prima) in un dizionario, con la prima riga che
diventa la chiave di ogni voce.
Facciamo alcuni esempi caricando i dati dal file "giocatori.csv" di cui conosciamo già la struttura.
import csv
# la lista su cui caricheremo i dati
dati = []
file = open("giocatori.csv", "r")
lettore = csv.DictReader(file)
for riga in lettore:
dati.append(riga)
file.close()
# da adesso in poi basta lavorare sulla variabile dati
# ...
# visualizzazione dati
for giocatore in dati:
print(giocatore)
L'output di questo codice diventa questo:
{'Nome': 'Maradona', 'Ruolo': 'Centrocampista', 'Squadra': 'Napoli'}
{'Nome': 'Gullit', 'Ruolo': 'Attaccante', 'Squadra': 'Milan'}
{'Nome': 'Brehme', 'Ruolo': 'Difensore', 'Squadra': 'Inter'}
{'Nome': 'Falcao', 'Ruolo': 'Centrocampista', 'Squadra': 'Roma'}
ATTENTI a EXCEL!!!
Se create il file CSV con Microsoft Excel questo imporrà come separatore il punto e virgola ; invece della virgola ,.
Invece di mettersi a cambiare tutti i file, è più semplice indicare a Python quale è il simbolo delimitatore dei campi, con questa sintassi:
In maniera analoga è possibile scrivere in un file CSV partendo da una serie di
dizionari (una... lista di dizionari!!!) utilizzando la funzione DictWriter.
import csv
dati = []
dati.append( {"nome":"Gino","cognome":"Panino","professione":"imbianchino"} )
dati.append( {"nome":"Pino","cognome":"Pinguino", "professione":"spazzacamino"} )
campi = ["nome","cognome", "professione"]
# il parametro newline così impostato assicura che il codice funzioni uguale su Win,Mac,Linux
file = open("esempio.csv", "w", newline="")
scrittore = csv.DictWriter(file, campi)
# inserisce l’intestazione nel file
scrittore.writeheader()
for riga in dati:
scrittore.writerow(riga)
file.close()
Questo codice produce un file CSV chiamato "esempio.csv" contenente i seguenti dati:
Spero sia tutto chiaro!
ATTENZIONE!!!
Se avete una lista di dizionari con tanti campi e volete creare un file CSV con un numero ristretto (di campi) fate così:
Arrivati qui dovete semplicemente riprovare il codice proposto in questi esempi e poi mettervi alla prova con i seguenti esercizi!
Esercizi
Nota
Gli esercizi che seguono si basano tutti sui file CSV reperibili su https://www.adjam.org/csv/.
Ogni esercizio indica il file da scaricare per poter eseguire l'esercizio correttamente.
Esercizio 901
Si basa sulla mappa dei cinema italiani.
- Step 0
- Caricare i dati dal file CSV in una opportuna lista dati.
- Step 1
- Visualizzare, per ogni cinema, il "Nome" (del cinema) e il "Comune", ove esso è locato.
- Step 2
- Come lo step precedente, ma limitandosi solo a quelli della regione "Marche". La regione si trova nel campo "Regione".
- Step 3
- Estrapolare i cinema inseriti dopo il 2015 per la regione "Lombardia". Con i suddetti dati creare un nuovo file CSV chiamato "LombardiaPost2015.csv" con i dati delle colonne "Nome", "Comune", "Provincia", "Longitudine", "Latitudine".
Esercizio 902
Si basa sull'anagrafica delle scuole italiane.
- Step 0
- Caricare i dati dal file CSV in una opportuna lista dati.
- Step 1
- Dato un codice scuola, digitato dall'utente, visualizzare il nome, l'indirizzo, la città, il numero di telefono, la mail e il sito web della scuola corrispondente. Oppure la scritta "Codice Scuola non esistente".
- Step 2
- Contare le tipologie di scuole, dividendo tra scuola dell'infanzia, prima, e secondaria di primo e secondo grado e fra scuola statale e paritaria.
Il risultato dovrà essere visualizzato in un formato tipo:
Scuola dell'infanzia (statale): 98 Scuola dell'infanzia (paritarie): 34 ... - Step 3
- Inserita una città da parte dell'utente, visualizzare tutte le scuole (nome e via) divise per tipologia (es: prima quelle dell'infanzia, poi le scuole primarie, etc...)
- Step 4
- Selezionato un CAP da parte dell'utente, visualizzare i nomi e i codici scuola di tutte le scuole presenti in quel CAP.
Esercizio 903
Si basa sulla mappa dei monumenti italiani.
- Step 0
- Caricare i dati dal file CSV in una opportuna lista dati.
- Step 1
- Creare una tupla con i nomi delle regioni italiane. Visualizzare i nomi delle regioni e permettere all'utente di selezionarne una. Visualizzare tutti i nomi dei monumenti di quella regione (tra virgolette) con accanto il nome della città in cui si trova (separata da virgola) e tra parentesi il "tipo" di monumento.
- Ad esempio, selezionata "Puglia", uno dei monumenti potrebbe essere:
"Eraclio", Barletta (Monumento) - Step 2
- Creare nella home dell'utente il file "MonumentiPuglia.txt" (se la regione selezionata è la Puglia) con i monumenti elencati uno per riga (ripeto, nella stessa visualizzazione dello step precedente).
- Step 3
- Inserito un anno a scelta a dell'utente visualizzare il numero di monumenti inseriti nel file in quell'anno.
- Step 4
- Per ognuno degli anni dal 2010 al 2019, visualizzare il numero di monumenti inseriti in quell'anno.
- Step 5
- Inserito un ID OpenStreetMap da parte dell'utente, visualizzare tutti i dati relativi al monumento selezionato oppure visualizzare la scritta: "nessun monumento esistente con ID:" e visualizzare l'ID inserito.
Esercizio 904
Si basa sulla mappa delle strutture ricettive marchigiane.
- Step 0
- Caricare i dati dal file CSV in una opportuna lista dati.
- Step 1
- Inserito dall'utente un numero S compreso fra 1 e 5, visualizzare tutte le strutture ricettive classificate come "Alberghi S stelle" dove S è il numero inserito dall'utente
- Step 2
- Come il precedente ma permettendo all'utente di selezionare anche una provincia (da scegliere in un elenco opportuno). Saranno dunque visualizzate tutte le strutture classificate in un certo modo di quella provincia.
- Step 3
- Visualizzare il numero totale di strutture ricettive per provincia.
- Step 4
- Selezionata una provincia, visualizzare i nomi di tutte le città della provincia che presentano strutture ricettive.