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).


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).


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.


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.


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.).


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.).


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.