如何在Python中将数据保存在YAML文件中?

2024-06-09 01:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在创建一个discord.py bot,它是用Python编写的,我需要以某种方式保存数据。我试着查看许多类型的数据库,但目前对我来说有点太难了,所以我想让它简单地读写。 我希望它能像这样保存,不仅仅是简单的写作和阅读

我在谷歌上找不到任何文档或任何东西

channelSug:

- SERVER_ID_HERE: CHANNEL_ID_HERE

Tags: 数据文档pyid数据库类型hereserver
1条回答
网友
1楼 · 发布于 2024-06-09 01:21:22

要读/写YAML,需要安装PyYAML库,所以使用pip install PyYAML就可以了

然后你可以写一个像这样的dict包装器

import os
import yaml

class YAMLPersistedDict:
    def __init__(self, *, filename):
        self.data = {}
        self.filename = filename
        self.load()

    def load(self):
        if os.path.isfile(self.filename):
            with open(self.filename, "r") as fp:
                self.data = yaml.safe_load(fp)
   
    def save(self):
        with open(self.filename, "w") as fp:
            yaml.dump(self.data, fp)

    def __getattr__(self, key):
        # Pass through to dict
        return getattr(self.data, key)

    def __setitem__(self, key, value):
        self.data[key] = value

    def __getitem__(self, key):
        return self.data[key]

    def __repr__(self):
        return f'<{self.filename!r}: {repr(self.data)}>'


d = YAMLPersistedDict(filename="./config.yaml")
d["servers"] = ["foo", "bar"]
d.save()

d = YAMLPersistedDict(filename="./config.yaml")
print(d)

请注意,每次修改后都需要调用d.save(),而并发保存(特别是因为您谈论的是异步不协调的内容)可能会破坏一切

相关问题 更多 >