Closed dennisangemi closed 2 years ago
Caro @dennisangemi non gli hai detto il separatore di campo. Prova con
mlr --csv --ifs ";" check Enna.csv
Grazie mille @aborruso , effettivamente lanciando
mlr --csv --ifs ";" check Enna.csv
il csv risulta ok.
Ho quindi rimosso le virgolette e sostituito i ;
con ,
così
# remove quotation
sed 's/"//g' Enna.csv > t-Enna.csv
mv t-Enna.csv Enna.csv
# substitute ; with ,
sed 's/;/,/g' Enna.csv > t-Enna.csv
mv t-Enna.csv Enna.csv
c'è un modo più ortodosso?
c'è un modo più ortodosso?
Miller non ama i CSV brutti, quindi basta usarlo :)
Prova mlr --csv --ifs ";" cat input.csv
e non avrai più le "
e il separatore sarà la ,
.
Puoi anche andare in sovra scrittura con mlr -I --csv --ifs ";" cat input.csv
Wow! Fantastico! Grazie ancora @aborruso . Terrò presente l'espressione mlr -I --csv --ifs ";" cat input.csv
.
Per me possiamo chiudere. Secondo te è necessario chiudere ricetta? Abbiamo toccato tanti temi.
Per me possiamo chiudere. Secondo te è necessario chiudere ricetta? Abbiamo toccato tanti temi.
Ma scusami, una ricetta "come modificare separatore di campi e rimuovere eventuali virgolette ridondanti in un CSV?" non è cosa utile e correlata?
Assolutamente sì. Scrivo appena ho 2 min di tempo.
@aborruso che te ne pare?
title: "Come modificare separatore di campo e rimuovere eventuali virgolette ridondanti in un CSV" linkTitle: "Modificare delimiter e rimuovere virgolette" date: 2022-04-22 description: > Ecco come modificare il separatore di campo e rimuovere eventuali virgolette ridondanti in un file di dati CSV utilizzando la utility Miller tags:
I file in formato CSV
sono i più usati per la condivisione di dati strutturati. In generale consistono in file di testo in cui i campi del dataset sono separati da virgole così come lo stesso acronimo in inglese suggerisce (Comma Separated Values).
Di seguito un banalissimo esempio di file CSV
Codice comune,Comune
086001,Agira
Alle volte, come in questo dataset di ISTAT, è possibile che:
,
ma il punto e virgola ;
"
Ecco le prime righe del dataset precedentemente citato:
"Codice comune";"Comune";"Popolazione al 1° gennaio - Maschi";"Popolazione al 1° gennaio - Femmine";"Popolazione al 1° gennaio - Totale";"Nati - Maschi";"Nati - Femmine";"Nati - Totale";"Morti - Maschi";"Morti - Femmine";"Morti - Totale";"Saldo naturale - Maschi";"Saldo naturale - Femmine";"Saldo naturale - Totale";"Iscritti da altri comuni - Maschi";"Iscritti da altri comuni - Femmine";"Iscritti da altri comuni - Totale";"Iscritti dall'estero - Maschi";"Iscritti dall'estero - Femmine";"Iscritti dall'estero - Totale";"Altri iscritti - Maschi";"Altri iscritti - Femmine";"Altri iscritti - Totale";"Cancellati per altri comuni - Maschi";"Cancellati per altri comuni - Femmine";"Cancellati per altri comuni - Totale";"Cancellati per l'estero - Maschi";"Cancellati per l'estero - Femmine";"Cancellati per l'estero - Totale";"Altri cancellati - Maschi";"Altri cancellati - Femmine";"Altri cancellati - Totale";"Saldo migratorio estero - Maschi";"Saldo migratorio estero - Femmine";"Saldo migratorio estero - Totale";"Unità in più/meno dovute a variazioni territoriali - Maschi";"Unità in più/meno dovute a variazioni territoriali - Femmine";"Unità in più/meno dovute a variazioni territoriali - Totale";"Aggiustamento statistico censuario totale - Maschi";"Aggiustamento statistico censuario totale - Femmine";"Aggiustamento statistico censuario totale - Totale";"Popolazione al 31 dicembre da censimento - Maschi";"Popolazione al 31 dicembre da censimento - Femmine";"Popolazione al 31 dicembre da censimento - Totale";"Popolazione residente in famiglia da censimento - Maschi";"Popolazione residente in famiglia da censimento - Femmine";"Popolazione residente in famiglia da censimento - Totale";"Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Maschi";"Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Femmine";"Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Totale";"Numero di famiglie al 31 dicembre da censimento";"Numero di convivenze al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica";"Numero medio di componenti per famiglia al 31 dicembre da censimento"
"086001";"Agira";3951;4061;8012;26;28;54;44;56;100;-18;-28;-46;23;28;51;15;10;25;0;0;0;62;35;97;10;13;23;5;3;8;5;-3;2;0;0;0;0;2;2;3894;4022;7916;3883;4015;7898;11;7;18;;3;
Generalmente non è necessario utilizzare le virgolette "
se non sono presenti caratteri speciali (e.g. newline character) o virgole che non hanno lo scopo di delimitare i campi. Pertanto, immaginando che il file sul quale stiamo lavorando sia denominato input.csv
, è possibile utilizzare la utility Miller per ottenere un "vero" CSV
a partire dall'esempio di istat. Sarà sufficiente lanciare il seguente comando da terminale
mlr -I --csv --ifs ";" cat input.csv
per ottenere in output un file come questo
Codice comune,Comune,Popolazione al 1° gennaio - Maschi,Popolazione al 1° gennaio - Femmine,Popolazione al 1° gennaio - Totale,Nati - Maschi,Nati - Femmine,Nati - Totale,Morti - Maschi,Morti - Femmine,Morti - Totale,Saldo naturale - Maschi,Saldo naturale - Femmine,Saldo naturale - Totale,Iscritti da altri comuni - Maschi,Iscritti da altri comuni - Femmine,Iscritti da altri comuni - Totale,Iscritti dall'estero - Maschi,Iscritti dall'estero - Femmine,Iscritti dall'estero - Totale,Altri iscritti - Maschi,Altri iscritti - Femmine,Altri iscritti - Totale,Cancellati per altri comuni - Maschi,Cancellati per altri comuni - Femmine,Cancellati per altri comuni - Totale,Cancellati per l'estero - Maschi,Cancellati per l'estero - Femmine,Cancellati per l'estero - Totale,Altri cancellati - Maschi,Altri cancellati - Femmine,Altri cancellati - Totale,Saldo migratorio estero - Maschi,Saldo migratorio estero - Femmine,Saldo migratorio estero - Totale,Unità in più/meno dovute a variazioni territoriali - Maschi,Unità in più/meno dovute a variazioni territoriali - Femmine,Unità in più/meno dovute a variazioni territoriali - Totale,Aggiustamento statistico censuario totale - Maschi,Aggiustamento statistico censuario totale - Femmine,Aggiustamento statistico censuario totale - Totale,Popolazione al 31 dicembre da censimento - Maschi,Popolazione al 31 dicembre da censimento - Femmine,Popolazione al 31 dicembre da censimento - Totale,Popolazione residente in famiglia da censimento - Maschi,Popolazione residente in famiglia da censimento - Femmine,Popolazione residente in famiglia da censimento - Totale,Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Maschi,Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Femmine,Popolazione residente in convivenza al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica - Totale,Numero di famiglie al 31 dicembre da censimento,Numero di convivenze al 31 dicembre da trattamento statistico dell'informazione di fonte anagrafica,Numero medio di componenti per famiglia al 31 dicembre da censimento
086001,Agira,3951,4061,8012,26,28,54,44,56,100,-18,-28,-46,23,28,51,15,10,25,0,0,0,62,35,97,10,13,23,5,3,8,5,-3,2,0,0,0,0,2,2,3894,4022,7916,3883,4015,7898,11,7,18,,3,
-I
determina la sovrascrittura del file indicato come argomento (input.csv
)--csv
indica il formato del file di input--ifs ";"
si utilizza per indicare il delimiter con il quale il file è stato concepito (in questo caso si tratta del punto e virgola ;
)cat
è un verbo che si utilizza per stampare a schermo il contenuto di un file. @dennisangemi non ti resta che pubblicarla 🔥
@aborruso appena fatto! Grazie per la benedizione ;) https://github.com/opendatasicilia/tansignari-md/commit/b54a026320c0cbc68bd191177f4f7b4ad44d0146
Buonasera! Volevo scaricare un file csv da istat utilizzando questo script
Arrivato a questo punto ho il file
Enna.csv
che però pare non essere sano. Se lanciomlr --csv check Enna.csv
ottengo:ma non capisco cosa abbia di strano. Qui di seguito una sorta di head.
Cosa sbaglio? Grazie in anticipo ;)