# Dato il file movimenti_comuni_2017.csv,vogliamo ottenere
# per ogni nome di comune la somma delle presenze e  degli arrivi.
# Per registrare le presenze, creiamo un dizionario che ad ogni
# nome di comune associa il numero di arrivi e di presenze.
#
# Ora scriviamo un nuovo file totalePresenze.csv che ha come
# intestazione la riga:
#
# “Comune, Totale Arrivi, Totale Presenze”
#
# Le altre righe del file csv saranno i nomi dei comuni e
# la somma degli arrivi e delle presenze.
# Riempiamo il file con gli elementi del dizionario.

import csv
with open("movimenti_comuni_2017.csv","r") as fileInput:
    fileReader = csv.reader(fileInput,delimiter=",",quotechar='"')
    # Ogni elemento di fileReader è una lista dei valori del csv
    # per una certa riga.
    # Per prima cosa ottengo la lista di liste.
    miaLista=list(fileReader)

print(miaLista)
print(len(miaLista))

# Creo un dict per sommare le presenze di ogni comune.
# il nome del comune sarà la chiave del dict.
# il numero di presenze è il valore.
dictPresenze={}
for line in miaLista[1:]:
    # rimuovo il primo elemento perchè è l'header
    #print(line[2],line[6])
    nomecomune=line[2]
    presenze=line[6]
    if nomecomune in dictPresenze.keys():
        dictPresenze[nomecomune]+= int(presenze)
    else:
        dictPresenze[nomecomune] = int(presenze)
#print(dictPresenze["ASSEMINI"])

# Ora uso un codice simile per sommare gli arrivi.
dictArrivi={}
for line in miaLista[1:]:
    nomecomune=line[2]
    arrivi=line[5]
    if nomecomune in dictArrivi.keys():
        # In acluni casi mancano gli arrivi (ovvero c'è una stringa vuota) 
	    # e non posso convertirli.
        # Gestisco l'errore e evito il blocco del ciclo.
        try:
            dictArrivi[nomecomune]+= int(arrivi)
        except:
            pass
    else:
        try:
            dictArrivi[nomecomune] = int(arrivi)
        except:
            pass

# Creo il file CSV sfruttando la funzione DictWriter.
with open("totalePresenze.csv", "w") as fileOut:
    fields = ["Comune", "Totale Arrivi", "Totale Presenze"]
    fileDictWriter = csv.DictWriter(fileOut,fieldnames = fields,delimiter=",")
    fileDictWriter.writeheader()
    for key in dictPresenze.keys():
        # Ogni riga è definita come un dizionario di tre chiavi.
        # Le chiavi sono i nomi dei campi del csv scritti nell'
        # header.
        # I valori corretti da scrivere sono contenuti nei
        # 2 dizionari riempiti prima, uno per arrivi e uno per presenze
        # Per esempio,ogni riga sarà scritta tramite un dict del tipo:
        # {"Comune":"ABBASANTA","Totale Arrivi":1647,"Totale Presenze":5126}
        fileDictWriter.writerow({fields[0]:key,fields[1]:dictArrivi[key],fields[2]:dictPresenze[key]})
