Sanity check di un file CSV
A cura di
Dennis Angemi
| issue
#255
| guida/e
Andrea Borruso
Introduzione
A volte, quando si lavora con dei CSV, torna utile sapere se questi file rispettano le specifiche RFC 4180
che definiscono lo standard.
Se hai installato miller
e vuoi indagare la conformità allo standard di un CSV (denominato, ad esempio, file.csv
) puoi semplicemente lanciare da riga di comando
mlr --csv check file.csv
Nel caso in cui il check fallisce, non è raro osservare messaggi di errore di questo tipo
mlr: CSV header/data length mismatch 4 != 1 at filename test.csv row 2.
Tuttavia capita di avere tra le mani un CSV non standard (non rispetta RFC 4180
) che risulta comunque interpretabile come tale. Per lanciare un sanity check allora useremo il comando precedente sostituendo l’opzione --csv
con --csvlite
, come in questo esempio:
mlr --csvlite check file.csv
Se il file è sano, non otterremo nessun messaggio.
Use case
Sia file.csv
così fatto
id,command,duration,description
1,./launcher "./spawner ec 800000 885000 800000 5 0 best_individual" 25 100000 20 0.2 0.8 stats.csv,,lorem ipsum
2,./launcher "./spawner ec 1200000 1200000 1100000 8 0 best_individual" 25 10000 25 0.25 0.75 stats.csv,,lorem ipsum
3,./launcher "./spawner ec 1100000 1100000 1000000 8 0 best_individual" 25 10000 1 0.25 0.75 stats.csv,,lorem ipsum
4,./launcher "./spawner ec 8800 20000 20000 100 0 best_individual" 25 10000 1 0.25 0.75 stats.csv,,lorem ipsum
5,../../bin/launcher "../../bin/spawner ../../bin/ec 600000 100000 400000 20 0 best_individual" 5 10 10 0.25 0.75 stats.csv,,
6,../../bin/launcher "../../bin/spawner ../../bin/ec 50000 7000 9000 80 0 best_individual" 5 10 10 0.25 0.75 stats,,test
Lanciando
mlr --csv check file.csv
si ottiene
mlr: CSV header/data length mismatch 4 != 1 at filename test.csv row 2.
il che vuol dire che file.csv
non rispetta lo standard RFC 4180
.
Questo file è comunque interpretabile come un CSV? Scopriamolo lanciando
mlr --csvlite check file.csv
Non otteniamo nessun errore. Possiamo continuare a lavorarci essendo consapevoli di questo dettaglio ;)