Каков самый простой читаемый формат файла конфигурации? [закрыто]

13

Текущий файл конфигурации выглядит следующим образом:

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'

Это читается с помощью Python во вложенный словарь:

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

Есть ли лучший способ сделать это? Идея состоит в том, чтобы получить тип поведения XML и избегать XML как можно дольше. Предполагается, что конечный пользователь почти полностью неграмотен в компьютерах и в основном использует блокнот и копирование. Таким образом, стандартный тип python «header + variable» считается слишком сложным.

Фиктивный пользователь редактирует конфигурационный файл, способные программисты обрабатывают словари. Вложенный словарь выбран для простого разбиения (регистратор не нуждается или даже не может иметь / редактировать параметры главного окна).

Юха
источник
11
Абсолютно простым было бы создать для вашего клиента небольшое приложение, которое ничего не делает, кроме редактирования этих файлов конфигурации.
Патрик Хьюз
11
Самый простой файл конфигурации для людей : Do what I want.это самый сложный для компьютеров: P
Sjoerd
@PatrickHughes Я думаю, что он уже существует. Знаете ли вы о такой программе. Я бы не хотел тратить время только на то, чтобы «красиво напечатать» простые вещи. Проблема в том, что добавление небольших программных разрывов требует большего. Я имею в виду, что на каждом компьютере есть vim, textedit или блокнот.
Юха
@sjoerd Это то, что я хотел знать. Есть ли алгоритмы, которые больше на человеческом языке, чем программы в этом смысле.
Юха
2
Пользователи могут сломать что угодно. Если они собираются редактировать его вручную, будьте готовы поддержатьmainwindow.title =='test"
MSalters

Ответы:

15

Вы можете использовать что-то вроде YAML . Вот ссылка на пример:

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.

Вы можете найти привязки Python для него в PyYAML . Это немного более удобно для пользователя, чем JSON (как выглядит ваш второй пример).

jmq
источник
10
YAML денди, но определенно не самый простой.
9000
1
Я подумал, что проще всего в контексте его вопроса: «получить тип поведения XML и избегать XML как можно дольше». Я не уверен в чем-то более простом, при выполнении этого требования.
JMQ
хм, так будет мой первый кодовый блок YAML, если я поменяю "." и "=" до ":" и потерять апостропы? Есть немного избыточные данные, но тогда это будет зависеть от пользователя, какая запись ему нравится больше всего.
Юха
3
Я довольно определенные нетехнические пользователи собираются получить отступ неправильно - не говоря уже о более неясных вещах , как >AFTER comments:, а &и *передid001
Izkata
6

Лучшее, что вы можете сделать, это предоставить макет вашего решения и, возможно, макет пары других решений, и спросить двух или трех типичных пользователей вашей системы. Они будут гораздо лучше рассказывать вам, что им нравится, чем сами избранные люди, которые отвечают на вопросы на этом сайте.

Это, как говорится, для "в основном компьютерных неграмотных" пользователей, я думаю, формат, который вы показываете в своем вопросе, вероятно, является лучшим форматом простого текста. Если они действительно неграмотны на компьютере, вы можете рассмотреть простой графический интерфейс, чтобы им не приходилось вручную редактировать файлы конфигурации.

Брайан Оукли
источник
3

Потерять все, что вы можете потерять. name.name.name=value, каждый на отдельной строке, примерно так просто, как вы можете получить. Вам не нужны кавычки для разбора, вы знаете, когда trueэто логическое значение, а когда true- строка, не заставляйте «тупого человека» говорить вам об этом. Для строк, если в поле не должно быть начальных / конечных пробелов, удалите их самостоятельно.

Росс Паттерсон
источник
3

Представьте себе китайца, который не знает английского и пытается прочитать ваш файл конфигурации. В качестве альтернативы представьте, что файл конфигурации написан на арабском языке (и вы не знаете арабский). Теперь спросите себя, действительно ли это читается человеком?

Даже если читатель знает английский, он все равно не знает, означает ли «logger.datarate = 100» 100 символов в секунду, или 100 ГиБ в час, или 100 кур на метрическую тонну.

Наиболее удобный для чтения формат файла - это двоичный файл с приличным диалоговым окном / мастером / конфигуратором на основе графического интерфейса пользователя (с интернационализацией, справочной системой и т. Д.).

Brendan
источник
2

Я с Патриком Хьюзом. Создайте простое приложение для редактирования конфигураций. Сам файл конфигурации может быть немного более сложным и может содержать атрибуты, используемые редактором (отображаемое имя, текст справки, тип значения, минимальное / максимальное значение и т. Д.).

Мисько
источник
1
проблема здесь в том, что приложение должно поддерживать osx, win и ubuntu и иметь доступ к файловой системе. Так что моя единственная альтернатива - это статический исполняемый файл python (и wx для собственного вида). Или есть другие языки? Можете ли вы сделать статические исполняемые файлы Java?
Юха
Приложение QT было бы простым и конформным решением в вашем случае
Рига,
2

Я говорю, что у вас (файл свойств) уже лучший формат для чтения человеком. :)

Вот мои аргументы:

  • Файл свойств - это просто пара ключ / значение. Легко читается человеком.
  • Краткий синтаксис, не похожий на xml.
  • Легко гнездится, с «.», Как в вашем примере.
  • Плоская структура позволяет легко рассеиваться в среде, контролируемой источником.

Этот последний пункт на самом деле очень важен. Учитывая, что в настоящее время все проекты разделены на ветви, файл конфигурации может причинить массу боли при объединении ветвей. Плоский формат файла, такой как файл свойств, легче объединить, чем файл древовидной структуры.

ming_codes
источник