什么';这是重建序列化对象的python方法

什么';这是重建序列化对象的python方法,python,serialization,hdf5,pytables,Python,Serialization,Hdf5,Pytables,我越是使用python,我就越想用python的方式来做,即尽量避免isinstance查询等。我正在开发一个用于数值模拟的科学参数探索框架 我的工作有两个硬约束:首先,我需要能够按照第一次运行的方式重复存储到磁盘上的特定模拟。第二,hdf5/pytables格式的数据应该是好的和可读的 这两个概念都有点对立。一旦我将内容存储为pytables数据,一些信息就会丢失。例如,在重新加载python后,int变成numpy.int64。如果要重新运行数值模拟,这可能会有问题,因为在某些情况下,变量与

我越是使用python,我就越想用python的方式来做,即尽量避免isinstance查询等。我正在开发一个用于数值模拟的科学参数探索框架

我的工作有两个硬约束:首先,我需要能够按照第一次运行的方式重复存储到磁盘上的特定模拟。第二,hdf5/pytables格式的数据应该是好的和可读的

这两个概念都有点对立。一旦我将内容存储为pytables数据,一些信息就会丢失。例如,在重新加载python后,int变成numpy.int64。如果要重新运行数值模拟,这可能会有问题,因为在某些情况下,变量与int的乘法效果很好,但与numpy.int64一起使用时会中断。例如,如果您使用尖峰神经网络模拟器BRIAN,就是这种情况

所以,一个简单的答案就是把所有的东西都腌掉,然后像以前一样拿回来。然而,这与可读的hdf5数组或表数据的想法并不一致

所以我想到的是将原始数据格式作为hdf5属性存储到相应的表或数组中,并使用此信息重建原始数据。首先,一般来说,这是一个好主意吗?第二,什么是最具python风格的方法

例如,这个呢:

original_class_name = data.__class__.__name__

# do the storage of data and the original_class_name

{...}

# load the hdf5data and reconstruct it

reconstructed_data = eval(original_class_name+'(hdf5data)')

对我来说,这似乎太粗糙了。

为什么不用
pickle
序列化对象,并为那些整理人类可读版本的人提供一个hdf5格式的额外文件呢?这会造成太大的开销。我在这里谈论的是从千兆到兆字节的数据。这让我想知道,当涉及到非常大的数据时,整个重建和类型检查问题是否有用。我现在通过非常严格的限制来处理所有事情,例如,通过对数据进行类型检查,如果它不属于一组非常本机的数据(numpy和python本机数据),则在开始时直接拒绝它。我认为,无论如何,正确的序列化应该优先。如果您想要人类可读的输出,您可以很容易地从一组序列化的对象生成它(只需读入并漂亮地打印它们)。然而,您的问题似乎是不同的数据类型。Python整数是32位的,但是您要将它们存储并重新加载为64位整数。如果将它们存储并重新加载为numpy.int32,代码是否有效?我打赌会的。