Partendo dallo spunto creato da due precedenti richieste, per Spesapubblica e per OpenCup, i cui script consentono di scaricare dati dai due portali Spesapubblica e Opencup, filtrarli e trasformarli, è nata l'idea di fare una cosa simile ma con i file pubblicati in formato tabellare sulla sezione amministrazione trasparente del portale istituzionale della Città Metropolitana di Napoli.
Il punto di partenza è un vecchio server Windows, dal quale attraverso uno script richiamo il file (generalmente un xls, xlsx o un ods) e lo trasformo in csv e json (proprio come facevo con spesapubblica e opencup)
curl http://192.168.x.x/assenze2018.xlsx -o "$cartella"/assenze2018.xlsx
lo trasformo in csv
<"$cartella"/assenze2018.xlsx in2csv -I -f xlsx >"$cartella"/assenze2018.csv
nel caso del file ods (l'equivalente dell'excel per open office) utilizzo
soffice --headless --convert-to csv assenze2018.ods
trasformo il csv in json
<"$cartella"/assenze2018.csv csvjson | jq . >"$cartella"/assenze2018.json
fin qui tutto bene ma controllando i files ho notato che hanno un numero lunghissimo di cifre decimali, come posso accorciarle almeno a due, tenendo conto che si tratta di percentuali?
Ho anche provato in questo modo (sempre attingendo dal vecchio script di opencup)
<"$cartella"/assenze2018.csv csvformat -d "|" -e "ISO-8859-15" >"$cartella"/assenze2018.csv
ma non funziona, dov'è che sbaglio?
Grazie
Ciao Pablo
Ho anche provato in questo modo (sempre attingendo dal vecchio script di opencup)
<"$cartella"/assenze2018.csv csvformat -d "|" -e "ISO-8859-15" >"$cartella"/assenze2018.csv
questo comando serve a fare in modo che l’output in CSV sia separato da |
. Che qui non serve.
Inoltre qui il file sorgente non ha encoding “ISO-8859-15” .
Rimuoverei la riga.
Per i decimali, in questo caso puoi usare semplicemente sed
e fare un trova e sostituisci che cerca numeri con struttura 0.00… e li trasforma in 0.00, via espressione regolare.
Lo script potrebbe essere
cartella="/iltuoperorso/dati
<"$cartella"/assenze2018.xlsx in2csv -I -f xlsx | sed -r 's/([0-9]+)(\.)([0-9]{2})([0-9]+)/\1\2\3/g' >"$cartella"/assenze2018.csv
<"$cartella"/assenze2018.csv csvjson | jq . >"$cartella"/assenze2018.json
Qui il ciao mondo della regex https://regex101.com/r/QTvYhe/1
L’output è qualcosa come
[
{
"Direzione": "Segretario Generale",
"Gennaio % di presenza": 79.56,
"Gennaio % di assenza": 20.43,
"Febbraio % di presenza": 86.5,
"Febbraio % di assenza": 13.5,
"Marzo % di presenza": 88.18,
"Marzo % di assenza": 11.81,
"Aprile % di presenza": 83.68,
"Aprile % di assenza": 16.31,
"Maggio % di presenza": null,
"Maggio % di assenza": null,
"Giugno % di presenza": null,
"Giugno % di assenza": null
}
]
Facci sapere