从外部保存通用python对象

从外部保存通用python对象,python,object,Python,Object,大约一年前,我从matlab转到python,现在仍然习惯于这种差异。在matlab中,您可以将结构(泛型类中稍微不太好的对象等效物)保存到外部文件中。因此,如果您使用的是生成您不理解的结构的东西,您可以将它们保存到一个文件中,然后进行比较 这个文件看起来像 structure 1 property1: value or values of property 1 property2: value or values of property 2 property3: value or values

大约一年前,我从matlab转到python,现在仍然习惯于这种差异。在matlab中,您可以将结构(泛型类中稍微不太好的对象等效物)保存到外部文件中。因此,如果您使用的是生成您不理解的结构的东西,您可以将它们保存到一个文件中,然后进行比较

这个文件看起来像

structure 1
property1: value or values of property 1
property2: value or values of property 2
property3: value or values of property 3

structure 2
property1: value or values of property 1
property2: value or values of property 2
property3: value or values of property 3

structure 3
property1: value or values of property 1
property2: value or values of property 2
property3: value or values of property 3
等等

有python的方法可以做到这一点吗?现在我只关心从外部打印它们,这样我就可以阅读和比较它们。Matlab可以让你读回它们,在这种情况下我不需要那种功能

有python的方法可以做到这一点吗?现在我只关心从外部打印它们,这样我就可以阅读和比较它们。Matlab可以让你读回它们,在这种情况下我不需要那种功能

没有真正通用且可读的序列化方案

pickle
可以处理任何东西,但它不好,不可读(事实上,它在很大程度上被指定为不可读,甚至版本0最多也被限定为“文本”),而且非常不安全

json
可读性很好,但对于大多数类型来说,它都不适用于开箱即用(尽管它适用于内置类型的简单结构,例如,如果您只是创建列表和dicts,就可以了)

您可以使用或,默认情况下,它们使结构可打印。他们使用标准的“repr”

这有点不利于通过大多数标准文本差异进行轻松比较,但两者都提供了一个
asdict
函数,该函数将实例转换为dict,然后您可以轻松地将其序列化为JSON(带换行符和缩进)或其他一些通用方案

有python的方法可以做到这一点吗?现在我只关心从外部打印它们,这样我就可以阅读和比较它们。Matlab可以让你读回它们,在这种情况下我不需要那种功能

没有真正通用且可读的序列化方案

pickle
可以处理任何东西,但它不好,不可读(事实上,它在很大程度上被指定为不可读,甚至版本0最多也被限定为“文本”),而且非常不安全

json
可读性很好,但对于大多数类型来说,它都不适用于开箱即用(尽管它适用于内置类型的简单结构,例如,如果您只是创建列表和dicts,就可以了)

您可以使用或,默认情况下,它们使结构可打印。他们使用标准的“repr”


这有点不利于通过大多数标准文本差异进行轻松比较,但两者都提供了一个
asdict
函数,该函数将实例转换为dict,然后您可以轻松地将其序列化为JSON(带换行符和缩进)或者其他一些通用方案。

你可以简单地对对象进行pickle:你能澄清你到底在寻找什么吗?在您的案例中,
结构是什么?您可以始终
打印
内置类型,并为任何数据结构定义表示形式。然而,比较数据的最常用方式可能不是将数据转储到文件中,而是在程序本身中进行比较。你可以简单地对对象进行pickle:你能澄清你到底在寻找什么吗?在您的案例中,
结构是什么?您可以始终
打印
内置类型,并为任何数据结构定义表示形式。然而,比较数据的最常用方式可能不是将数据转储到文件中,而是在程序本身中进行比较。调用
pickle
“非常不安全”似乎很奇怪。它允许执行代码,这对于来自不可信源的数据是一个问题。在受信任的环境中,它是任意对象的默认序列化和反序列化解决方案。通过
pickle
简单地存储和加载自己的数据一点也不安全。“将pickle称为“非常不安全”似乎很奇怪。它允许可执行代码“是的,这会使它不安全,很容易假设它只是一个数据描述符。”。“它是任意对象的默认序列化和反序列化解决方案”不,它不是,也不应该是默认的,因为它远远不仅仅是一种序列化和反序列化格式。“通过pickle简单地存储和加载自己的数据一点也不安全。”同样,安全使用手榴弹也是可能的,安全使用pickle也是可能的。这并不能保证pickle的安全。将pickle称为“非常不安全”似乎很奇怪。它允许执行代码,这对于来自不可信源的数据是一个问题。在受信任的环境中,它是任意对象的默认序列化和反序列化解决方案。通过
pickle
简单地存储和加载自己的数据一点也不安全。“将pickle称为“非常不安全”似乎很奇怪。它允许可执行代码“是的,这会使它不安全,很容易假设它只是一个数据描述符。”。“它是任意对象的默认序列化和反序列化解决方案”不,它不是,也不应该是默认的,因为它远远不仅仅是一种序列化和反序列化格式。“通过pickle简单地存储和加载自己的数据一点也不安全。”同样,安全使用手榴弹也是可能的,安全使用pickle也是可能的。这并不能保证泡菜的安全。
TypeName(field1=value1, field2=value2, ...)