在Python中处理配置文件

时间:2015-04-28 08:17:01

标签: python configuration-files

我正在玩Python来开发一个专注于文本处理的简单应用程序。为此,我需要用户添加一些信息并配置一些变量(如果需要)。所以我在考虑配置文件。我一直在阅读很多关于它的内容(主要是ini文件和配置文件),但我有一些问题:

  • 放置配置文件的最佳位置在哪里?为此使用appdirs是对的吗?
  • 由于我需要默认值,我应该如何处理?我应该在第一次发布时生成吗?有没有项目这样做?我想看看,但我找不到。

2 个答案:

答案 0 :(得分:3)

  

为此使用appdirs是对的吗?

如果您打算在不同平台上安装该应用,使用appdirs似乎是一个合适的选择。

  

由于我需要默认值,我该如何处理?

默认配置,假设它不会因安装,用户,平台等而改变......将它放在app目录中是有意义的。 否则,也请使用appdirs

对于格式,如果配置文件仅由应用程序更改(而不是由用户直接更改,例如在文本编辑器中),那么只需使用您感觉更舒服的格式。在机器的眼中,它们之间通常没有太大的区别。虽然某些解决方案可能比其他解决方案更优化,但您会发现自己相当快。任何事都足够好,无论是.ini.json.yml等......

现在,如果您打算让用户手动更改配置,那么最好采用足够简单的格式,这样可以减少混乱的可能性。在这种情况下,我通常会使用yaml并使用非常简单的结构。它被解析为python dict,并且通常会正确推断出类型。

示例

# user_config.yml
# Some example configuration

paulo:
    age: 25
    city: Berlin

david:
    age: 29
    city: Oviedo
# app.py
# loading the configuration
import yaml

user_config = yaml.load(open('user_config.yml', 'r'))
user_config
{'david': {'age': 29, 'city': 'Oviedo'},
 'paulo': {'age': 25, 'city': 'Berlin'}}

答案 1 :(得分:0)

我将配置文件与应用程序放在一起,更容易找到它们。

至于格式,有a nice wrietup about the various formats可帮助您下定决心。我已经转到完整的JSON,其中包含_条评论,所有条目都通过json.load()加载:

[
    {
        "_": "the name of the game",
        "name": "Cluedo"
    },
    {
        "_": "number of players",
        "number_of_players": 8
    }
]