繁体   English   中英

如何以人类可读的格式写入 yaml 文件?

[英]How to write to yaml file in human readable format?

我有一些需要编写的数据类型:

一种。 numpy 数组的列表,例如不同大小的[ndarray, ndarray, ndarray]

任何任意的 numpy 数组,例如np.zeros((5,6)), np.randn((76,2))等等。

C。 我还没有想到的任何其他未来数据类型。

要求:

  1. 我需要一个函数来保存所有这些数据类型,无需特定处理,并且未来兼容上述类型 c。

  2. 我还需要人类可读格式的输出文件转储。

到目前为止,我只能使用 YAML 或 pickle 来实现要求 1,这两种文件都带有二进制文件,即不是人类可读的。

@staticmethod
def _read_with_yaml(path):
    with open(path, 'r') as stream:
        return yaml.load(stream)

@staticmethod
def _write_with_yaml(path, obj):
    with io.open(path, 'w+', encoding='utf8') as outfile:
        yaml.dump(obj, outfile, default_flow_style=False, allow_unicode=True)

此示例代码输出非人类可读的文件,但适用于我拥有的数据类型。

有没有办法同时满足这两个要求?

不,不能满足您的要求。

您已经有一个函数yaml.dump()可以保存所有这些数据类型。 正如您所注意到的,对于 numpy 数据结构,它并没有以一种非常易读的方式这样做。 这是由于 numpy 没有针对其特殊数据结构的转储例程,而是退回到不那么可读的默认!python....标记的数据结构转储。 现在您(或 YAML 或 Numpy 包维护者)可以为那些以更具可读性的格式转储的对象提供特殊例程,以便可以覆盖。 您可以使YAML 库中的表示器更智能,并在不涉及 Numpy 类的情况下为 Numpy 数据结构获得更具可读性的输出。

但是你希望所有未来的数据类型都这样,并且 IMO 哥德尔定理的变体适用:即使 YAML 库被扩展以涵盖所有已知情况并以可读的方式转储它们,总会有新的数据结构,尤其是在 C 中基于扩展(如 Numpy),如果没有额外的工作,就无法以可读的方式表示。

所以因为你的

我还没有想到的任何其他未来未知的数据类型。

前提是,这不仅是一项艰巨的工作,而且是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM