我长期以来一直使用普通的python文件进行配置。我可以包含注释(提醒我,如果变量名称不够,那么条目是什么)并支持列表和词典。
现在我需要为客户导入这个东西似乎有点危险,因为如果他们手动编辑错误,它可能会破坏系统。
将来我希望能够在程序中更新文件,并且能够使用普通编辑器进行编辑(并且不必匹配<>
或()
:
我现在正在考虑向JSON添加注释,但这基本上需要重写解析器以保留注释。而且JSON的可读性不是很好。
有.ini
个文件的ConfigObj库可以保留注释,但.ini
可以满足我的需求(包含值为dicts列表的dicts列表)。
我应该使用其他配置文件格式吗?或者我应该在导入它们之前以安全的方式解析我的.py
文件(这也允许再次将它们写出来)?
答案 0 :(得分:2)
Chazeon和jme表示你应该看看YAML。它支持嵌套数据结构(列表(YAML中的序列),dict(映射)和各种基元(整数,浮点数,字符串,日期)。
YAML还支持行尾注释(与#
一起引入),但Chazeon提到的“标准”PyYAML解析器会在读取数据时抛弃它们(并且不能写入这些)。 / p>
派生自PyYAML的包ruamel.yaml(我是作者)在进行往返时保留了注释(YAML文件到python数据结构到YAML文件)。它还保留了大部分YAML格式(块与列表和词典的单行)。
缩进然而是“标准化的”,因此在第一次往返之后所有块映射和序列看起来都相同。缩进默认为两个空格,但是这些可以单独设置,以及短划线可以在序列元素之前的空间内“推入”使用例如yaml.indent(mapping=3, sequence=5, offset=2)
答案 1 :(得分:1)
你考虑过YAML吗?它可以以#
开头,而PyYAML等解析器已经存在。
据我所知,像MongoDB这样的一些比较大的程序正在使用YAML作为配置文件,有些程序使用YAML在文件前面存储元数据,例如,Pandoc支持yaml在Markdown和。
有关详细信息,您可以访问The Official YAML Website,其中提供了一些很好的示例和一些信息或维基百科页面。
答案 2 :(得分:1)
对我来说(只是我的意见)
我将使用JSON,因为它很小,易于阅读并且几乎可以与任何语言和平台兼容。 如需评论,我会使用一些关键字,例如“注释”并将其指定为JSON标记。无论如何,JSON将忽略未使用的标签。
JSON示例
{
"param1" : "value1",
"param2" : "value2",
}
带有我的评论的JSON示例
{
"param1" : "value1",
"param2" : "value2",
"Comment" : "My Comment."
}
顺便说一下,根据我的经验,我们不能依赖客户编辑任何格式化的数据JSON,XML,ini甚至是YAML。他们会制造一些东西。