Python 如何以人类可读的格式写入yaml文件?
我需要编写一些数据类型: a。numpy阵列的列表,例如不同大小的Python 如何以人类可读的格式写入yaml文件?,python,file,serialization,yaml,pickle,Python,File,Serialization,Yaml,Pickle,我需要编写一些数据类型: a。numpy阵列的列表,例如不同大小的[ndarray,ndarray,ndarray] b。任意numpy数组,例如np.zero((5,6))、np.randn((76,2))等等 c。我还没有想到的任何其他未来数据类型 要求: 我需要一个函数来保存所有这些数据类型,无需特定的处理,并且具有上述类型c的未来兼容性 我还需要输出文件转储为人类可读的格式 到目前为止,我只能用YAML或pickle实现需求1,这两种方法都是用二进制文件实现的,即不是人类可读的 @sta
[ndarray,ndarray,ndarray]
b。任意numpy数组,例如np.zero((5,6))、np.randn((76,2))
等等
c。我还没有想到的任何其他未来数据类型
要求:
@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库中的representer更加智能化,并在不涉及Numpy类的情况下为Numpy数据结构获得更可读的输出
但您希望所有未来的数据类型都使用这种方法,我认为哥德尔定理的一个变体适用于此:即使YAML库被扩展以覆盖所有已知情况并以可读的方式转储它们,也总会有新的数据结构,特别是在基于C的扩展中(如Numpy),如果没有额外的工作,就无法以可读的方式表示
因为你的
我还没有想到的任何其他未来未知数据类型
前提是,这不仅仅是一项艰巨的工作,而且是不可能的。你确定严格的不可能吗?最后,任何数据结构都将由其他数据结构组成,递归地,最终将是一些原语。我假设某个库以某种树格式实现了这一点,但为什么这是不可能的呢?还有,如果没有“任何未来”的需求呢?是否有一些库在内部处理其他用例?ruamel.yaml和PyYAML中都没有(我认为NumPy不能与syck库一起工作)。原则上,第三方库可以提供更好的可读性表示,但我认为任何库都不能。我曾经考虑过为ruamel.yaml这样做,但我必须深入研究,而且我不是NumPy用户,所以这样做的动机很低。。您应该能够monkeypatch您正在使用的那些NumPy类。如果您需要这方面的帮助(对于
ruamel.yaml
),请发布另一个关于转储的完整程序的问题,输出是什么样子的,以及您想要什么输出