代码之家  ›  专栏  ›  技术社区  ›  Stunner

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

  •  3
  • Stunner  · 技术社区  · 16 年前

    嘿,伙计们,我正在用Python做一个自动归档/备份之类的东西( http://sourceforge.net/projects/frozendirectory/ ). 到目前为止,它使用一个普通的文本文件来存储少量的设置(但不断增长)。我正在考虑将它转换为XML文件,以便它更灵活/可伸缩,因此更容易长期使用。但是,当我问一个朋友时,他建议我把它保存在一个python文件中,比如settings.py,并在需要时使用需要设置的文件中的“导入设置”。他声称它占用的空间更少,我只需要编写代码来写入设置文件,而不用担心读写。

    他的观点很有说服力,但我想知道为什么没有其他大型程序使用他推荐的技术。

    所以不管怎样,我只是想知道你们的想法。我应该用XML、.py还是别的什么?提前谢谢。

    6 回复  |  直到 16 年前
        1
  •  2
  •   too much php    16 年前

    JSON是XML的一个很好的替代品,它也很容易阅读 和 用Python编写。

        2
  •  2
  •   detly    16 年前

    我发现 ConfigObj 真的很有用。它类似于Windows上的“ini”格式,但更灵活。

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

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

        3
  •  2
  •   Corey Goldberg    16 年前

    他的观点很有说服力,但使我怀疑 为什么没有其他大型程序使用这种技术 他在推荐。

    (Django使用settings.py)

    对于我自己的程序。。。我通常要么像您提到的那样使用Python文件,要么使用 ConfigParser .

    这取决于我的观众是谁的配置文件。。。同为python程序员或非程序员的人。

        4
  •  1
  •   Elf King    16 年前

    谁说大型程序不使用这种技术?:-)有道理的话,他们会的。

    为什么有使用XML的趋势?这是为了解决验证所提供的数据的问题,确保多个数据生成器不必互相了解,确保多个阅读器对数据进行相同的解释,将数据的性质封装在数据文件本身中。。。不停地。。。

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

        5
  •  1
  •   Community Mohan Dere    9 年前

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

    最好的论据 反对 使用 import 因为设置文件是一个“邪恶的黑客”假设可能会添加一些代码到文件中,以干扰您的程序的工作。再说一次,有足够邪恶的人可以用其他东西代替你的整个程序,所以。。。取决于决心的程度。你需要看看这是否是你的计划的目标。

    如果你认为这不合适,我认为如果你的设置足够简单的话,你可以将它们保存在纯文本文件中(毕竟,阅读in I样式设置是一行,a-la

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

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

    你可以做的XML。。。但那不是对人类友好的。

        6
  •  1
  •   Dan Temkin    9 年前

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

    如果是我,我会用下面的内容作为最初基于需求的评估的基础,然后从那里开始。

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

    • 是---> INI文件 , JSON格式 , 山药

    • 否---> INI文件 , JSON格式 , 山药

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

    • 是---> INI文件 , JSON格式 , 山药

    • 没有--->INI文件, JSON格式 ,山药

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

    • 是---> INI文件 , JSON格式 , 山药

    • 否---> INI文件 , JSON格式 , 山药

    D) 是否要在文件中插入或交叉引用键值?

    • 是---> INI文件 , JSON格式 , 山药

    • 否---> INI文件 , JSON格式 , 山药

    最后,

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

    JSON全面良好,很好地支持嵌套键值或数组对象和数据类型支持。适合web开发或JS对象集成。插值困难,很难在不替换整个对象的情况下主动调整嵌套的键值。

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

    您选择什么取决于您的需求是什么,但作为一个规则,我通常远离xml,主要是因为键不能以JSON或YAML那样的方式提供信息。

    更新:

    我只是在复习 YAML docs 我看到了下面的信息,我想你会发现它很有用。

    因此,可以将YAML视为JSON的自然超集,它提供了更好的可读性和更完整的信息- 操作模型。实际上也是这样;每个JSON文件也是有效的YAML文件。这使得从JSON迁移变得很容易 如果/当需要附加功能时

    很酷吧?无论如何,考虑到这些信息,我可能会默认为JSON,然后如果我需要转到YAML。