【问题标题】:Trouble converting yaml file to toml file无法将 yaml 文件转换为 toml 文件
【发布时间】:2021-09-29 22:12:20
【问题描述】:

我正在尝试将 yaml 文件转换为 python3 中的 toml 文件。

我的计划是使用需要字典的toml.dumps(),然后写入输出文件。

我需要能够匹配我需要插入的工具的输入 toml 要求。 该工具在某些情况下需要内联表,如下所示:

[states.Started]
outputs = { on = true, running = false }
[[states.Started.transitions]]
inputs = { go = true }
target = "Running"

我了解如何生成表 [] 和表数组 [[]],但我很难弄清楚如何创建内联表。

TOML 文档说内联表与表相同。因此,例如,对于上面的表数组 (states.Started.Transitions),我认为输入将是整个列表中的一个表,但是 TOML 格式会在输出时将其分解为单独的表。

谁能帮我弄清楚如何配置我的字典来输出内联表?

编辑***

我不确定我是否完全理解我做错了什么。这是我的代码

table = {'a':5,'b':3}

inline_table = toml.TomlDecoder().get_empty_inline_table()

inline_table['Values'] = table

encoder = toml.TomlPreserveInlineDictEncoder()
toml_config = toml.dumps(inline_table,encoder = encoder)

但是这不会创建一个内联表,而是在输出中创建一个常规表。

[Values]
a = 5
b = 3

【问题讨论】:

  • 提示:如果您需要其他指导,请评论我的回答,如果您只是编辑您的问题,我不会收到通知。您将错误的表设为内联表 - table 必须是内联的,而不是包含 Values 的根表!

标签: yaml toml


【解决方案1】:

此工具需要在某些情况下使用内联表,例如

那么它不是 TOML 工具。正如您自己发现的那样,内联表在语义上等同于普通表,因此如果该工具符合 TOML 规范,它一定不会关心表是否内联。如果是,这不是 TOML 问题。

话虽如此,您可以通过

创建应该成为内联表的字典
TomlDecoder().get_empty_inline_table()

返回的对象是一个dict子类,可以这样使用。

创建完结构后,使用TomlPreserveInlineDictEncoder 进行转储,不要问为什么突然将其称为InlineDict 而不是InlineTable

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2012-10-12
    • 2021-07-21
    • 1970-01-01
    • 2019-04-15
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多