什么是最简单的人类可读配置文件格式?[关闭]


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标准的“标头+变量”类型被认为太难了。

虚拟用户可以编辑配置文件,程序员可以处理字典。选择嵌套字典以便于拆分(记录器不需要,甚至不能拥有/编辑mainwindow参数)。


11
绝对最简单的方法是为您的客户端构建一个小型应用程序,除了编辑这些配置文件外什么都不做。
Patrick Hughes

11
对于人类来说,最简单的配置文件是:Do what I want.它是计算机上最难的配置文件::P
Sjoerd 2012年

@PatrickHughes我猜想已经存在一个了。您知道这样的程序吗?我不想花时间仅仅“打印”简单的东西。问题在于,添加较小的程序中断将需要更多。我的意思是每台计算机都有vim,textedit或记事本。
Juha 2012年

@sjoerd这是我想知道的。从这个意义上说,在人类语言上是否存在比程序更多的算法。
Juha 2012年

2
用户可以破坏任何东西。如果他们要手动编辑它,请准备好支持mainwindow.title =='test"
MSalters 2012年

Answers:


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.

您可以在PyYAML上找到它的Python绑定。它比JSON更加用户友好(这是第二个示例的样子)。


10
YAML很花哨,但绝对不是最简单的。
9000

1
在他的问题中,我认为最简单:“获取XML类型的行为,并尽可能避免使用XML”。在满足此要求的同时,我不确定是否有任何更简单的方法。
jmq 2012年

嗯,如果我更改“”,我的第一个代码块YAML也是如此。和“ =”到“:”并失去光致变质?有一些冗余数据,但是这取决于用户,他最喜欢哪种符号。
Juha 2012年

3
我相当确定非技术用户会弄错缩进-更不用说像>after comments:,the &*front 这样更晦涩的了id001
Izkata 2012年

6

您可以做的最好的事情是提供解决方案的模型,也许还提供其他几个解决方案的模型,并询问系统的两个或三个代表性用户。他们比告诉自己在此站点上回答问题的人更擅长告诉您他们喜欢什么。

话虽如此,对于“基本上是计算机不识字的”用户,我认为您在问题中显示的格式可能是最好的纯文本格式。如果他们确实是计算机文盲,则可能需要考虑一个简单的GUI,这样他们就不必手动编辑配置文件。


3

失去一切你可能会失去的东西。 name.name.name=value,每行都尽可能地简单。您不需要使用引号进行解析,您知道何时true是布尔值,什么时候true是字符串,请不要让“哑巴人”告诉您。对于字符串,如果该字段不应包含前导/后缀空格,请自行删除它们。


3

想象一下一个不懂英语的中国人正在尝试读取您的配置文件。或者,假设配置文件使用阿拉伯语(而您不知道阿拉伯语)。现在问问自己,这真的是人类可读的吗?

即使读者确实懂英语,他们仍然不知道“ logger.datarate = 100”是每秒100个字符,还是每小时100 GiB,还是每公吨100只鸡。

最易于阅读的文件格式是带有不错的基于GUI的对话框/向导/配置器(带有国际化,帮助系统等)的二进制文件。


2

我和帕特里克·休斯在一起。构建一个用于编辑配置的简单应用。配置文件本身可能会稍微复杂一些,并且可能包含供编辑器使用的属性(显示名称,帮助文本,值类型,最小/最大值等)。


1
这里的问题是该应用程序必须支持osx,win和ubuntu并有权访问文件系统。因此,我唯一的选择是静态python可执行文件(wx具有本机外观)。还是还有其他语言?您可以制作静态Java可执行文件吗?
Juha 2012年

根据您的情况,QT应用将是一个简单而又符合实际的解决方案
Riga

2

我说您拥有的(属性文件)已经是最好的人类可读配置格式。:)

这是我的论点:

  • 属性文件只是键/值对。易于人类阅读。
  • 简洁的语法,不像xml。
  • 像您的示例一样,可以使用“。”轻松嵌套。
  • 扁平结构允许在源代码控制的环境中轻松进行区分。

最后一点实际上很重要。鉴于当今的项目都被分成了多个分支,因此在合并分支时,配置文件可能会造成很多麻烦。平面文件格式(例如属性文件)比树形结构文件更易于合并。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.