要实施哪种类型的设置文件?

时间:2010-07-22 02:29:03

标签: python file settings

嘿伙计们,我正在使用Python(http://sourceforge.net/projects/frozendirectory/)制作一个自动存档/备份的东西。截至目前,它使用普通的文本文件来存储少量设置(但不断增长)。我正在考虑将其更改为XML文件,以便它更灵活/可扩展,从而更容易使用。但是,当我问朋友时,他建议我将它保存在python文件中,例如settings.py,只需在需要时需要设置的文件中使用“导入设置”。他声称它占用的空间更少,我只需要编写代码来写入设置文件,而不是担心阅读和写作。

他的观点令人信服,但让我想知道为什么没有其他大型节目使用他推荐的技术。

所以无论如何,我只是想知道你们的想法。我应该使用XML,.py还是其他东西?提前谢谢。

6 个答案:

答案 0 :(得分:2)

JSON是XML的一个很好的替代品,它也很容易用Python读取

答案 1 :(得分:2)

我发现ConfigObj对此非常有用。它类似于Windows上的“ini”格式commmon,但更灵活。

您可以设置配置标志的类型和约束。您还可以将默认设置与用户设置合并,即。 用户的配置文件中可能缺少某些设置,表示应使用默认值。这使得升级非常无缝,除非您需要对现有设置进行一些神奇的重新解释。

RabbitVCS有一个ConfigObj specification的例子,this是实现它的代码。

答案 2 :(得分:2)

  

他的观点令人信服,但令我惊讶   为什么没有其他大型程序使用该技术   他推荐。

(Django使用settings.py)

对于我自己的程序......我通常使用你提到的Python文件,或者我使用ConfigParser

这取决于我的观众是谁的配置文件...一个python程序员或非程序员。

答案 3 :(得分:1)

谁说大型程序不使用这种技术? :-)他们这样做,当它有意义。

为什么有使用XML的趋势?那就是解决涉及验证所提供数据的问题,确保多个数据生成器不必相互学习,确保多个读者将相同地解释数据,以便在数据文件本身中封装数据的性质。 ......以及......以及......

为什么你的朋友告诉你要避免它?因为对你的应用来说,它可能太麻烦了:-)

答案 4 :(得分:1)

你的朋友可能给了你最好的主意......取决于你的情况。它会很快,对你和程序来说很容易,不需要召唤额外的库(或天堂禁止,只为此安装一个)。

针对使用import设置文件的最佳参数是一个“邪恶的黑客”假设可能会在文件中添加一些代码来干扰程序的工作。然后,有人邪恶可以用其他东西替换你的整个程序,所以......取决于决心的程度。你需要看看这是否与你的计划目标有关。

如果您认为不合适,我认为您可以将设置保存在纯文本文件中,如果它们足够简单(在所有阅读INI风格的设置之后是一个单行,a-la

settings = dict(s.split('=',1) for s in open('somefile'))

如果您的结构更结构化,JSON或YAML应该这样做。另见:

你可以做的XML ......但这不是人类友好的。

答案 5 :(得分:1)

我想说这取决于存储设置的复杂性和对象或目的。

如果是我 - 我会使用以下内容作为初步需求评估的基础,并从那里开始。

A)我的数据是否需要多个嵌套层?

  • 是---> INI档案 JSON YAML

  • NO ---> INI文件 JSON YAML

B)我是否需要存储值数组或其他复杂数据类型?

  • 是---> INI文件 JSON YAML

  • NO ---> INI文件, JSON ,YAML

C)我是否需要将参数映射到实时流?

  • 是---> INI文件 JSON YAML

  • 否---> INI文件 JSON YAML

D)我想在文件中插入或交叉引用键值吗?

  • 是---> INI文件 JSON YAML

  • NO ---> INI档案 JSON YAML

最后,

INI文件很简单,内插参数很容易,但在需要时很难变得更复杂。

JSON很好,对嵌套键值或数组对象和数据类型支持的良好支持。适合Web开发或JS对象集成。插值困难,难以主动调整嵌套键值而不替换整个对象。

YAML也很好,我非常喜欢对python对象和模块的内部规范的支持。某些数据类型可能有点奇怪或某些版本的python不可用。数组的嵌套有点奇怪,嵌套的键值对象有很多键可能很繁琐。

您选择的内容取决于您的要求,但通常我会远离xml,主要是因为密钥无法以与JSON或YAML相同的方式提供信息。

更新

我刚刚查看了YAML docs,并查看了以下信息,我认为您可能会发现它很有用。

  因此,YAML可以被视为JSON的自然超集,提供更好的人类可读性和更完整的信息 -   模型。在实践中也是如此;每个JSON文件也是有效的YAML文件。这使得从JSON迁移变得容易   如果/何时需要附加功能,则为YAML

非常酷吧?无论如何,根据这些信息,我可能会默认为JSON,然后我需要转到YAML。