Qual è il formato di file di configurazione leggibile più semplice? [chiuso]


13

Il file di configurazione corrente è il seguente:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

Questo viene letto con Python in un dizionario nidificato:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

C'è un modo migliore per farlo? L'idea è di ottenere un tipo di comportamento XML ed evitare XML il più a lungo possibile. Si presume che l'utente finale sia quasi totalmente analfabeta al computer e sostanzialmente utilizza il blocco note e il copia-incolla. Pertanto, il tipo di "intestazione + variabili" standard di Python è considerato troppo difficile.

L'utente fittizio modifica il file di configurazione, i programmatori in grado di gestire i dizionari. Il dizionario nidificato viene scelto per una suddivisione semplice (il logger non ha bisogno o addirittura non può avere / modificare i parametri della finestra principale).


11
Il più semplice sarebbe costruire una piccola app per il tuo client che non fa altro che modificare questi file di configurazione.
Patrick Hughes,

11
Il file di configurazione più semplice per gli umani è: Do what I want.è il più difficile per i computer, però: P
Sjoerd,

@PatrickHughes Immagino che ne esista già uno. Sei a conoscenza di un tale programma. Non vorrei prendere tempo solo per "stampare" cose semplici. Il problema è che l'aggiunta di piccole interruzioni di programma richiede di più. Voglio dire, ogni computer ha vim, textedit o blocco note.
Juha,

@sjoerd Questo è quello che volevo sapere. Esistono algoritmi che sono più sul linguaggio umano che programmi in questo senso.
Juha,

2
Gli utenti possono rompere qualsiasi cosa. Se lo modificheranno manualmente, preparati a supportarlomainwindow.title =='test"
MSalters il

Risposte:


15

Puoi usare qualcosa come YAML . Ecco un link ad un esempio:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Puoi trovarlo su PyYAML . È un po 'più facile da usare rispetto a JSON (che è l'aspetto del tuo secondo esempio).


10
YAML è dandy, ma sicuramente non è il più semplice.
9000,

1
Ho pensato al più semplice nel contesto della sua domanda: "ottenere il tipo di comportamento XML ed evitare XML il più a lungo possibile". Non sono sicuro di nulla di più semplice, pur soddisfacendo questo requisito.
jmq

hmm, così è il mio primo blocco codice YAML se cambio "." e "=" a ":" e perdere gli aphostropes? Ci sono dei dati un po 'ridondanti, ma spetterebbe all'utente quale notazione gli piace di più.
Juha,

3
Sono abbastanza certo che gli utenti non tecnici sbaglieranno il rientro - per non parlare delle cose più oscure come il >dopo comments:, e il &e *di fronteid001
Izkata

6

La cosa migliore che puoi fare è fornire un mockup della tua soluzione, e forse un mockup di un paio di altre soluzioni, e chiedere a due o tre utenti rappresentativi del tuo sistema. Saranno molto più bravi a dirti cosa gli piace delle persone autoselezionate che rispondono alle domande su questo sito.

Detto questo, per gli utenti "fondamentalmente analfabeti del computer" penso che il formato che mostri nella tua domanda sia probabilmente il miglior formato di testo normale. Se sono davvero analfabeti per computer, potresti prendere in considerazione una semplice GUI in modo che non debbano modificare manualmente i file di configurazione.


3

Perdi tutto ciò che puoi perdere. name.name.name=value, ciascuno su una riga separata, è il più semplice possibile. Non hai bisogno delle virgolette per l'analisi, sai quando trueè un booleano e quando trueè una stringa, non farti dire dal "muto umano". Per le stringhe, se il campo non deve contenere spazi iniziali / finali, rimuoverli da soli.


3

Immagina un cinese che non conosce l'inglese che sta cercando di leggere il tuo file di configurazione. In alternativa, immagina che il file di configurazione sia in arabo (e che non conosci l'arabo). Ora chiediti, è davvero leggibile dall'uomo?

Anche se il lettore conosce l'inglese, non ha ancora idea se "logger.datarate = 100" significa 100 caratteri al secondo o 100 GiB all'ora o 100 polli per tonnellata.

Il formato di file più leggibile dall'uomo è un file binario con una finestra di dialogo / procedura guidata / configuratore decente basata su GUI (con internazionalizzazione, sistema di aiuto, ecc.).


2

Sono con Patrick Hughes. Crea un'app semplice per modificare le configurazioni. Il file di configurazione stesso potrebbe essere un po 'più complesso e potrebbe contenere attributi che l'editor può usare (nome visualizzato, testo di aiuto, tipo di valore, valore min / max, ecc.).


1
il problema qui è che l'app deve supportare osx, win e ubuntu e avere accesso al filesystem. Quindi la mia unica alternativa è un eseguibile python statico (e wx per il look nativo). O ci sono altre lingue? Puoi creare eseguibili java statici?
Juha,

Un'app QT sarebbe una soluzione semplice e conforme nel tuo caso
Riga,

2

Dico che quello che hai (file delle proprietà) è già il miglior formato di configurazione leggibile dall'uomo. :)

Ecco i miei argomenti:

  • Il file delle proprietà è solo una coppia chiave / valore. Facilmente leggibile dall'essere umano.
  • Sintassi sintetica, non come xml.
  • Facilmente annidabile, con '.', Come nel tuo esempio.
  • La struttura piatta consente una facile diffusione in un ambiente controllato dalla sorgente.

Quest'ultimo punto è in realtà piuttosto importante. Dato che oggigiorno i progetti sono tutti suddivisi in rami, il file di configurazione può causare tonnellate di dolore quando si uniscono i rami. I formati di file flat come i file delle proprietà sono più facili da unire rispetto ai file della struttura ad albero.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.