Domanda Aiuto con dizionario Python con codici catastali comuni italiani

Stato
Discussione chiusa ad ulteriori risposte.

Grayfish

Utente Electrum
2 Ottobre 2016
238
96
4
174
Salve, per la creazione di un programma con Python 2.7 addetto al calcolo del codice fiscale, mi servono i codici catastali di tutti i comuni italiani espressi sotto forma di dizionario. Es. dizionario={"ABANO TERME":"A001","ABBADIA LARIANA":"A005"}.
Ve ne sarei molto grato.
 
Altro che tre righe, ne basta una!
Scarichi il file e chiami questa, senza nemmeno usare il codice che hanno usato dall'altra parte:
Python:
dizionario = { i[0]:i[1] for i in [ entry.split(';') for entry in open('lista-codici.txt').read().splitlines() ] }

Sta volta ammetto di essere stato un po' bastardo a scrivere un codice così corto, probabilmente un paio di linee in più non guastavano :asd:
 
Altro che tre righe, ne basta una!
Scarichi il file e chiami questa, senza nemmeno usare il codice che hanno usato dall'altra parte:
Python:
dizionario = { i[0]:i[1] for i in [ entry.split(';') for entry in open('lista-codici.txt').read().splitlines() ] }

Sta volta ammetto di essere stato un po' bastardo a scrivere un codice così corto, probabilmente un paio di linee in più non guastavano :asd:
devo ammettere che un codice così "compresso" non sarei mai riuscito a scriverlo.
 
Altro che tre righe, ne basta una!
Scarichi il file e chiami questa, senza nemmeno usare il codice che hanno usato dall'altra parte:
Python:
dizionario = { i[0]:i[1] for i in [ entry.split(';') for entry in open('lista-codici.txt').read().splitlines() ] }

Sta volta ammetto di essere stato un po' bastardo a scrivere un codice così corto, probabilmente un paio di linee in più non guastavano :asd:

Io invece non scrivo nemmeno una riga di codice per caricarli in tempo d'avvio... sono troppo pigro. Prendo un sito contenente la lista completa dei comuni e i codici catastali: http://www.agenziaentrate.gov.it/wp...cicatastali_comuni_05_05_2010.pdf?MOD=AJPERES
Mi preparo una regex al gusto (flavor) di Javascript (<3):
Codice:
([A-M0-9]{1,4})(?:\s)([A-Za\s]+)(?:.+)
che testo nel sito:
http://www.regextester.com/
e come sostituzione inserisco:
Codice:
dizionario = { "$2" : "$1" }
copio tutto l'output e mi scrivo un'altra espressione regolare:
Codice:
\s}\sdizionario = {\s
e sostituisco con una virgola.

Esempio output:
Codice:
dizionario = { "ABANO TERME " : "A001","ABBADIA CERRETO " : "A004","ABBADIA LARIANA " : "A005","ABBADIA SAN SALVATORE " : "A006","ABBASANTA " : "A007","ABBATEGGIO " : "A008","ABBIATEGRASSO " : "A010","ABETONE " : "A012","ABRIOLA " : "A013","ACATE " : "A014","ACCADIA " : "A015","ACCEGLIO " : "A016","ACCETTURA " : "A017","ACCIANO " : "A018","ACCUMOLI " : "A019","ACERENZA " : "A020","ACERNO " : "A023","ACERRA " : "A024","ACI BONACCORSI " : "A025","ACI CASTELLO " : "A026","ACI CATENA " : "A027","ACI SANT" : "A029","ACIREALE " : "A028","ACQUACANINA " : "A031","ACQUAFONDATA " : "A032","ACQUAFORMOSA " : "A033","ACQUAFREDDA " : "A034","ACQUALAGNA " : "A035","ACQUANEGRA CREMONESE " : "A039","ACQUANEGRA SUL CHIESE " : "A038","ACQUAPENDENTE " : "A040","ACQUAPPESA " : "A041","ACQUARICA DEL CAPO " : "A042","ACQUARO " : "A043","ACQUASANTA TERME " : "A044","ACQUASPARTA " : "A045","ACQUAVIVA COLLECROCE " : "A050","ACQUAVIVA DELLE FONTI " : "A048","ACQUAVIVA D" : "A051","ACQUAVIVA PICENA " : "A047","ACQUAVIVA PLATANI " : "A049","ACQUEDOLCI " : "M211","ACQUI TERME " : "A052","ACRI " : "A053","ACUTO " : "A054","ADELFIA " : "A055","ADRANO " : "A056" }

Bello, vero?
 
Se eri ancora più pigro potevi copia&incollare la mia riga di codice sull'interprete python e copiarti l'output.
Ma personalmente eviterei di avere una sberla di 189934 caratteri in mezzo al codice, dovresti metterla in un modulo a parte per non sporcare il codice principale e a questo punto tanto vale tenerla in txt visto che è già pronto, è più human readable e python se lo mangia in pochi millisecondi.

Comunque io inizialmente non gli avevo risposto perché non si era sbattuto minimamente, nemmeno aveva linkato un file o una pagina web dove si potessero reperire i codici per le rispettive provincie. Hai ragione nel dire che si poteva fare anche in altri modi, Grayfish doveva quantomeno metterci l'impegno.
 
Se eri ancora più pigro potevi copia&incollare la mia riga di codice sull'interprete python e copiarti l'output.
E se non ho python installato? Nah, troppo sca.zzo (cit. St3ve) ad aprire il terminale e scrivere il comando :asd: :patt:. Scherzo, era una risposta semitroll, in realtà era solo una scusa per mostrare un'altra alternativa.

Ma personalmente eviterei di avere una sberla di 189934 caratteri in mezzo al codice, dovresti metterla in un modulo a parte per non sporcare il codice principale e a questo punto tanto vale tenerla in txt visto che è già pronto, è più human readable e python se lo mangia in pochi millisecondi.
vabbè, esistono i beautifier... Per esempio, http://www.cleancss.com/python-beautify/ mi sistema il codice automaticamente. Verrebbe:
Codice:
dizionario = {
    "ABANO TERME ": "A001",
    "ABBADIA CERRETO ": "A004",
    "ABBADIA LARIANA ": "A005",
    "ABBADIA SAN SALVATORE ": "A006",
    "ABBASANTA ": "A007",
    "ABBATEGGIO ": "A008",
    "ABBIATEGRASSO ": "A010",
    "ABETONE ": "A012",
    "ABRIOLA ": "A013",
    "ACATE ": "A014",
    "ACCADIA ": "A015",
    "ACCEGLIO ": "A016",
    "ACCETTURA ": "A017",
    "ACCIANO ": "A018",
    "ACCUMOLI ": "A019",
    "ACERENZA ": "A020",
    "ACERNO ": "A023",
    "ACERRA ": "A024",
    "ACI BONACCORSI ": "A025",
    "ACI CASTELLO ": "A026",
    "ACI CATENA ": "A027",
    "ACI SANT": "A029",
    "ACIREALE ": "A028",
    "ACQUACANINA ": "A031",
    "ACQUAFONDATA ": "A032",
    "ACQUAFORMOSA ": "A033",
    "ACQUAFREDDA ": "A034",
    "ACQUALAGNA ": "A035",
    "ACQUANEGRA CREMONESE ": "A039",
    "ACQUANEGRA SUL CHIESE ": "A038",
    "ACQUAPENDENTE ": "A040",
    "ACQUAPPESA ": "A041",
    "ACQUARICA DEL CAPO ": "A042",
    "ACQUARO ": "A043",
    "ACQUASANTA TERME ": "A044",
    "ACQUASPARTA ": "A045",
    "ACQUAVIVA COLLECROCE ": "A050",
    "ACQUAVIVA DELLE FONTI ": "A048",
    "ACQUAVIVA D": "A051",
    "ACQUAVIVA PICENA ": "A047",
    "ACQUAVIVA PLATANI ": "A049",
    "ACQUEDOLCI ": "M211",
    "ACQUI TERME ": "A052",
    "ACRI ": "A053",
    "ACUTO ": "A054",
    "ADELFIA ": "A055",
    "ADRANO ": "A056"
}
 
Stato
Discussione chiusa ad ulteriori risposte.