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

如何在Python中将数据保存在YAML文件中?,python,discord.py,Python,Discord.py,我目前正在创建一个discord.py bot,它是用Python编写的,我需要以某种方式保存数据。我试着查看许多类型的数据库,但目前对我来说有点太难了,所以我想让它简单地读写。 我希望它能像这样保存,不仅仅是简单的写作和阅读 我在谷歌上找不到任何文档或任何东西 channelSug: - SERVER_ID_HERE: CHANNEL_ID_HERE 要读/写YAML,您需要安装PyYAML库,所以使用pip install PyYAML可以这样做 然后你可以写一个像这样的dict包装器

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

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

channelSug:

- SERVER_ID_HERE: CHANNEL_ID_HERE

要读/写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)
导入操作系统
进口yaml
类别YAMLPersistedAct:
def uuu init uuu(self,*,文件名):
self.data={}
self.filename=文件名
self.load()
def加载(自):
如果os.path.isfile(self.filename):
将open(self.filename,“r”)作为fp:
自数据=yaml.安全荷载(fp)
def保存(自我):
打开(self.filename,“w”)作为fp:
yaml.dump(自我数据,fp)
def_u_ugetattr_u_u(self,key):
#通过口述
返回getattr(self.data,键)
定义设置项(自身、键、值):
self.data[键]=值
def _u获取项目(自身,密钥):
返回self.data[键]
定义报告(自我):
返回f“”
d=YAMLPersistedct(filename=“./config.yaml”)
d[“服务器”]=[“foo”,“bar”]
d、 保存()
d=YAMLPersistedct(filename=“./config.yaml”)
印刷品(d)

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

您是否查看了一些有关yaml文件的文档?例如,这个:PyYAML库可能是您问题的解决方案