opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[frictionless] aggiungere il delimiter ad un datapackage #249

Closed dennisangemi closed 1 year ago

dennisangemi commented 1 year ago

Sera!

Mi piacerebbe aggiungere le informazioni relative al delimiter

dialect:
  delimiter: ;

in un datapackage (precisamente "Tabular Data Resource") senza manualmente copiare e incollare queste due righe.

A quanto ho capito non c'è un flag di frictionless describe che permette di "aggiungere automaticamente le info relative al delimiter" ma esiste l'opzione --dialect che tuttavia non riesco a far funzionare ;)

Se lancio:

frictionless describe --help

ottengo

Usage: frictionless describe [OPTIONS] [SOURCE]...

Arguments:
  [SOURCE]...  Data source [default: stdin]

Options:
  --dialect TEXT                  An inline JSON object or a path to a JSON
                                  file that provides the dialect
                                  (configuration for the parser)

Un paio di domande:

  1. ma come faccio a creare "An inline JSON object or a path to a JSON file that provides the dialect"? Devo farlo a manina?
  2. Qual è la sintassi completa del comando describe col flag --dialect? Forse frictionless describe --dialect dialectinfo.json data.csv?
aborruso commented 1 year ago

Caro @dennisangemi , quando il delimiter non è presente, si dà per scontato che sia quello di default. che per il dialetto CSV è la ,.

Infatti se hai in input

a;b
3;t
4;v

e dai frictionless describe --type "package" input_01.csv, ottieni

resources:
  - name: input_01
    type: table
    path: input_01.csv
    scheme: file
    format: csv
    encoding: utf-8
    mediatype: text/csv
    dialect:
      csv:
        delimiter: ;
    schema:
      fields:
        - name: a
          type: integer
        - name: b
          type: string

Se invece hai un CSV con separator , non hai nulla, e se non hai nulla il separatore è la ,.

Se ne vuoi forzare comunque la scrittura, a partire ad esempio da

a,b
3,t
4,v

devi definirlo come opzione di dialetto

frictionless describe --type "package" --dialect '{"csv": {"delimiter": ","}}' input.csv

che ti darà

resources:
  - name: input
    type: table
    path: input.csv
    scheme: file
    format: csv
    encoding: utf-8
    mediatype: text/csv
    dialect:
      csv:
        delimiter: ','
    schema:
      fields:
        - name: a
          type: integer
        - name: b
          type: string
dennisangemi commented 1 year ago

Ciao @aborruso, grazie mille ❤

Adesso è tutto chiaro. In sostanza non so leggere e non capisco le documentazioni 👀

Ho un'altra domanda per te: Si può affermare che ogni datapackage (relativo a dei csv) privo della key dialect descrive dei csv il cui separatore sia la virgola?

In altre parole: È impossibile che io trovi dei datapackage in cui non sia specificato il delimiter nonostante questo sia diverso dalla virgola (per un csv)?

aborruso commented 1 year ago

Adesso è tutto chiaro. In sostanza non so leggere e non capisco le documentazioni 👀

Ho fatto la stessa tua domanda tempo fa, e anche io non le so capire

Ho un'altra domanda per te: Si può affermare che ogni datapackage (relativo a dei csv) privo della key dialect descrive dei csv il cui separatore sia la virgola?

Sì, se non dichiarato è la ,. Io però da utente preferisco leggerlo sempre. E quindi siccome aggiungerlo non è un errore, ed aggiungerlo è facile, io lo aggiungerei anche se ridondante.

aborruso commented 1 year ago

Con l'occasione ho aperto una PR https://github.com/frictionlessdata/specs/pull/821/files

dennisangemi commented 1 year ago

Ricetta pubblicata (creo anche alias) https://tansignari.opendatasicilia.it/ricette/utilities/frictionless_specificare_delimiter_datapackage/

Grazie mille @aborruso (anche per la PR!)

dennisangemi commented 1 year ago

@aborruso OT: grazie a questa ricetta sono riuscito ad aggiungere questa condizione al nascente tool frictionless2md: se il delimiter è specificato nel dapackage allora verrà aggiunto all'output in markdown, altrimenti il campo verrà saltato (stampando un warning ;)