如何以人类可读的格式写入yaml文件?
How to write to yaml file in human readable format?
我有一些数据类型需要写:
一个。 numpy 数组的列表,例如[ndarray, ndarray, ndarray]
大小不一。
b。任何任意的 numpy 数组,例如np.zeros((5,6)), np.randn((76,2))
等等。
c。我还没有想到的任何其他未来数据类型。
要求:
我需要一个函数来保存所有这些数据类型,无需特定处理,并且将来与上述类型 c 兼容。
我还需要人类可读格式的输出文件转储。
到目前为止,我只能使用 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)中,如果不进行额外的工作就无法以可读的方式表示。
所以因为你
Any other future unknown datatype that hasn't occurred to me yet.
前提,这不仅仅是很多困难的工作,而是不可能的。
我有一些数据类型需要写:
一个。 numpy 数组的列表,例如[ndarray, ndarray, ndarray]
大小不一。
b。任何任意的 numpy 数组,例如np.zeros((5,6)), np.randn((76,2))
等等。
c。我还没有想到的任何其他未来数据类型。
要求:
我需要一个函数来保存所有这些数据类型,无需特定处理,并且将来与上述类型 c 兼容。
我还需要人类可读格式的输出文件转储。
到目前为止,我只能使用 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)中,如果不进行额外的工作就无法以可读的方式表示。
所以因为你
Any other future unknown datatype that hasn't occurred to me yet.
前提,这不仅仅是很多困难的工作,而是不可能的。