处理 Python 中的配置文件

Handle config files in Python

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

Is it right to use appdirs for this?

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

As I need default values, how should I handle this?

默认配置,假设它不会根据安装、用户、平台等发生变化...将它放在应用程序目录中是有意义的。 否则,也使用 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'}}

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

关于格式,有a nice wrietup about the various formats可以帮助您下​​定决心。我已经完整 JSON,有一个 _ 评论条目,全部通过 json.load():

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