Qual é o formato de arquivo de configuração legível por humanos mais simples? [fechadas]

13

O arquivo de configuração atual é o seguinte:

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'

Isso é lido com python em um dicionário aninhado:

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

Existe um jeito melhor de fazer isso? A idéia é obter o tipo de comportamento XML e evitar o XML o maior tempo possível. O usuário final é assumido quase totalmente como analfabeto do computador e basicamente usa o bloco de notas e copiar e colar. Portanto, o tipo "cabeçalho + variáveis" padrão do python é considerado muito difícil.

O usuário fictício edita o arquivo de configuração, programadores capazes manipulam os dicionários. O dicionário aninhado é escolhido para facilitar a divisão (o logger não precisa ou nem pode ter / editar parâmetros da janela principal).

Juha
fonte
11
O mais simples seria construir para seu cliente um pequeno aplicativo que não faz nada além de editar esses arquivos de configuração.
Patrick Hughes
11
O arquivo de configuração mais simples para os seres humanos é: Do what I want.É o mais difícil para os computadores, embora: P
Sjoerd
@PatrickHughes Eu acho que já existe um. Você conhece esse programa? Eu não gostaria de ter tempo apenas para "imprimir bastante" coisas simples. O problema é que adicionar pequenas quebras de programa requer mais. Quero dizer que todo computador tem vim, textedit ou bloco de notas.
Juha
@jojoerd Isto é o que eu queria saber. Existem algoritmos mais voltados para a linguagem humana do que programas nesse sentido.
Juha
2
Os usuários podem quebrar qualquer coisa. Se eles estão indo para editá-lo manualmente, estar preparado para apoiarmainwindow.title =='test"
MSalters

Respostas:

15

Você pode usar algo como YAML . Aqui está um link para um exemplo:

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.

Você pode encontrar ligações Python para isso em PyYAML . É um pouco mais amigável que o JSON (que é como é o seu segundo exemplo).

jmq
fonte
10
YAML é dândi, mas definitivamente não é o mais simples.
9000
1
Eu pensei que era o mais simples no contexto de sua pergunta: "obtenha o tipo de comportamento XML e evite o XML o maior tempo possível". Não tenho certeza de nada mais simples, enquanto cumpro esse requisito.
JMQ
hmm, assim como meu primeiro código YAML, se eu alterar o "." e "=" para ":" e perder os afostropos? Existem dados um pouco redundantes, mas cabe ao usuário qual notação ele mais gosta.
Juha
3
Estou bastante certo de usuários não-técnicos estão indo para obter o errado recuo - e muito menos o material mais obscuro como o >depois comments:, eo &e *em frenteid001
Izkata
6

A melhor coisa que você pode fazer é fornecer uma maquete da sua solução, e talvez uma maquete de algumas outras soluções, e perguntar a dois ou três usuários representativos do seu sistema. Eles serão muito melhores em dizer o que gostam do que as pessoas selecionadas automaticamente que responderem a perguntas neste site.

Dito isto, para usuários "basicamente analfabetos do computador", acho que o formato que você mostra na sua pergunta é provavelmente o melhor formato de texto sem formatação. Se eles realmente são analfabetos no computador, convém considerar uma GUI simples para que eles não precisem editar manualmente os arquivos de configuração.

Bryan Oakley
fonte
3

Perca tudo o que você pode perder. name.name.name=value, cada um em uma linha separada, é o mais simples possível. Você não precisa das aspas para analisar, você sabe quando trueé um booleano e quando trueé uma string, não faça o "humano burro" dizer isso. Para strings, se o campo não tiver espaços em branco à esquerda / à direita, retire-os você mesmo.

Ross Patterson
fonte
3

Imagine uma pessoa chinesa que não sabe inglês e está tentando ler seu arquivo de configuração. Como alternativa, imagine que o arquivo de configuração esteja em árabe (e que você não saiba árabe). Agora pergunte a si mesmo: isso é realmente legível por humanos?

Mesmo que o leitor saiba inglês, ainda não tem idéia se "logger.datarate = 100" significa 100 caracteres por segundo, 100 GiB por hora ou 100 galinhas por tonelada métrica.

O formato de arquivo legível mais humano é um arquivo binário com uma caixa de diálogo / assistente / configurador baseado em GUI decente (com internacionalização, sistema de ajuda, etc.).

Brendan
fonte
2

Estou com Patrick Hughes. Crie um aplicativo simples para editar configurações. O arquivo de configuração em si pode ser um pouco mais complexo e pode conter atributos para o editor usar (nome para exibição, texto de ajuda, tipo de valor, valor mínimo / máximo, etc.).

Misko
fonte
1
o problema aqui é que o aplicativo precisa suportar osx, win e ubuntu e ter acesso ao sistema de arquivos. Portanto, minha única alternativa é o executável python estático (e wx para aparência nativa). Ou há outros idiomas? Você pode criar executáveis ​​java estáticos?
precisa
A QT aplicativo seria uma solução simples e conformada no seu caso
Riga
2

Eu digo que o que você tem (arquivo de propriedades) já é o melhor formato de configuração legível por humanos. :)

Aqui estão os meus argumentos:

  • O arquivo de propriedades é apenas um par de chave / valor. Facilmente legível por humanos.
  • Sintaxe concisa, não como xml.
  • Facilmente aninhado, com '.', Como no seu exemplo.
  • A estrutura plana permite uma fácil diferenciação em um ambiente controlado pela fonte.

Esse último ponto é realmente muito importante. Como os projetos hoje em dia são todos divididos em ramificações, o arquivo de configuração pode causar muita dor ao mesclar ramificações. O formato de arquivo simples, como o arquivo de propriedades, é mais fácil de mesclar do que o arquivo de estrutura em árvore.

ming_codes
fonte