提问人:otherJL0 提问时间:10/28/2023 最后编辑:CrazyChuckyotherJL0 更新时间:10/28/2023 访问量:60
如何将 Python 数据类转储到没有标签的 YAML?
How can I dump a Python dataclass to YAML without tags?
问:
我有一个嵌套的数据类,我想使用 PyYaml 库将其转换并保存为 yaml 格式。生成的 YAML 输出包含我想删除的 YAML 标签。
我有以下 Python 代码:
from dataclasses import dataclass
import yaml
@dataclass
class Database:
host: str
username: str
password: str
@dataclass
class Environment:
name: str
database: Database
@dataclass
class Config:
environment: Environment
database = Database(host="localhost", username="admin", password="secret")
environment = Environment(name="local", database=database)
config = Config(environment=environment)
print(yaml.dump(config))
生成 YAML 输出:
!!python/object:__main__.Config
environment: !!python/object:__main__.Environment
database: !!python/object:__main__.Database
host: localhost
password: secret
username: admin
name: local
如何在不包含 YAML 标记的情况下生成嵌套数据类的 YAML 输出?期望的结果应如下所示:
environment:
database:
host: localhost
password: secret
username: admin
name: local
答:
2赞
otherJL0
10/28/2023
#1
在转储 Python 类的实例时,PyYaml 将序列化内容并添加一个指示该类的标签,以便允许将 yaml 输出读回指定的类。PyYaml 不会标记本机 Python 对象,例如列表和字典,因此通过使用 asdict
方法将数据类实例转换为字典,YAML 转储将不包含任何标记:
from dataclasses import dataclass, asdict
import yaml
@dataclass
class Database:
host: str
username: str
password: str
@dataclass
class Environment:
name: str
database: Database
@dataclass
class Config:
environment: Environment
database = Database(host="localhost", username="admin", password="secret")
environment = Environment(name="local", database=database)
config = Config(environment=environment)
print(yaml.dump(asdict(config)))
上面更新的代码生成以下输出:
environment:
database:
host: localhost
password: secret
username: admin
name: local
评论
!!