用Python处理配置文件



我正在使用Python开发一个专注于文本处理的简单应用程序。为了实现这一点,我需要用户添加一些信息并配置一组变量(如果需要的话)。所以我想有一个配置文件。我读了很多关于它的文章(主要是ini文件和configparser),但我有一些问题:

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

为此使用appdirs正确吗?

如果您打算在不同的平台上安装应用程序,在我看来使用appdirs是一个合适的选择。

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

默认配置,假设它不会根据安装、用户、平台等而更改。。。将它放在应用程序目录中是有意义的。否则,也可以使用appdirs

至于格式,如果配置文件只由应用程序更改(而不是由用户直接更改,例如在文本编辑器中),那么只需使用您觉得更舒服的格式即可。在机器的眼中,它们之间通常没有太大的区别。尽管有些解决方案可能比其他解决方案更适合某些解决方案,但您自己会发现这一点很快。任何东西都足够好,无论是.ini.json.yml等…

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

示例

# 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'}}

我将配置文件放在应用程序中,这样更容易查找它们。

至于格式,有一个关于各种格式的好文章,可以帮助你下定决心。我已经使用了完整的JSON,其中有一个_注释条目,全部通过json.load():加载

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

最新更新