Python: Decent config file format

谁说胖子不能爱 提交于 2019-12-09 15:57:17

问题


I'd like to use a configuration file format which supports key value pairs and nestable, repeatable structures, and which is as light on syntax as possible. I'm imagining something along the lines of:

cachedir = /var/cache
mail_to = me@example.org

job {
   name = my-media
   frequency = 1 day
   source {
      from = /home/michael/Images

   source { }
   source { }       
}

job { }

I'd be happy with something using significant-whitespace as well.

JSON requires too many explicit syntax rules (quoting, commas, etc.). YAML is actually pretty good, but would require the jobs to be defined as a YAML list, which I find slightly awkward to use.


回答1:


I think YAML is great for this purpose, actually:

jobs:
 - name: my-media
   ...

 - name: something else
   ...

Or, as a dict instead of list:

jobs:
  my-media:
    frequency: 1 day
    ...
  something-else:
    frequency: 2 day
    ...

Another thing to consider, which you might not have, is using Python source for the configuration. You can nest Python dicts and lists in a very readable manner and it provides multiple unexpected benefits. Django uses Python source for its settings files, for example.




回答2:


As Python's built-in configparser module does not seem to support nested sections, I'd first try ConfigObj. (See an introductory tutorial here). According to its homepage, this is the set of features worth mentioning:

  • Nested sections (subsections), to any level
  • List values
  • Multiple line values
  • String interpolation (substitution)
  • Integrated with a powerful validation system
    • including automatic type checking/conversion
    • repeated sections
    • and allowing default values
  • When writing out config files, ConfigObj preserves all comments and the order of members and sections
  • Many useful methods and options for working with configuration files (like the 'reload' method)
  • Full Unicode support

ConfigObj is used by Bazaar, Trac, IPython, matplotlib and many other large Python projects, so it seems pretty mature and stable to me (although I never used it myself).




回答3:


I think you should check libconfig library http://www.hyperrealm.com/libconfig/. There should be somewhere python bindings for it.

Another solution is to use json format which is already provided by python itself. Search documentation for JSON module.




回答4:


Why re-invent the wheel? You can make use of:

http://docs.python.org/library/configparser.html




回答5:


You can use the config system of red-dove.

http://www.red-dove.com/config-doc/




回答6:


You can also consider Jsonnet if your needs exceed these other options. Jsonnet is an extension of JSON that at first glance adds comments, relaxes comma rules, and removes the need for so much quoting. But if you look deeper you see it really provides a full functional programming language and has support for template extension via mixins, file imports, etc. There is a Python binding for it, but its actual implementation is C++.



来源:https://stackoverflow.com/questions/3007796/python-decent-config-file-format

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!