Python 存储';对象';

Python 存储';对象';,python,pytables,Python,Pytables,PyTables支持存储Python对象吗? 大概是这样的: dtype = np.dtype([('Name', '|S2'), ('objValue', object)]) data = np.zeros(3, dtype) file.createArray(box3,'complicated',data) 我在尝试这样做时会出错当然。。。 如何正确存储对象数组?可能吗? 谢谢如果您想在某个库不支持的地方存储复杂数据,请尝试使用该模块。如果您想在某个库不支持的地方存储复杂数据,请尝试使用该

PyTables支持存储Python对象吗? 大概是这样的:

dtype = np.dtype([('Name', '|S2'), ('objValue', object)])
data = np.zeros(3, dtype)
file.createArray(box3,'complicated',data)
我在尝试这样做时会出错当然。。。 如何正确存储对象数组?可能吗?
谢谢

如果您想在某个库不支持的地方存储复杂数据,请尝试使用该模块。

如果您想在某个库不支持的地方存储复杂数据,请尝试使用该模块。

您可以使用Pytables保存通用Python对象:

>>> dtype = np.dtype([('Name', '|S2'), ('objValue', object)])
>>> data = np.zeros(3, dtype)
>>> file = tables.openFile('/tmp/test.h5', 'w')
>>> myobjects = file.createVLArray(file.root, 'myobjects', tables.ObjectAtom())
>>> myobjects.append(data)
>>> myobjects[0]
array([('', 0), ('', 0), ('', 0)], 
      dtype=[('Name', '|S2'), ('objValue', '|O8')])

但是,这将在后台使用pickle(事实上是cPickle),因此您将无法从其他语言访问这些对象(pickle是一种仅由Python本身支持的序列化格式)。

您可以使用Pytables保存通用Python对象:

>>> dtype = np.dtype([('Name', '|S2'), ('objValue', object)])
>>> data = np.zeros(3, dtype)
>>> file = tables.openFile('/tmp/test.h5', 'w')
>>> myobjects = file.createVLArray(file.root, 'myobjects', tables.ObjectAtom())
>>> myobjects.append(data)
>>> myobjects[0]
array([('', 0), ('', 0), ('', 0)], 
      dtype=[('Name', '|S2'), ('objValue', '|O8')])

但是,这将在幕后使用pickle(事实上是cPickle),因此您将无法从其他语言访问这些对象(pickle是一种仅由Python本身支持的序列化格式)。

很遗憾……感谢您的回答注意,pickle存在隐式序列化格式的所有问题(也就是说,这可能是错误的)并且使用pickle读取内容可以执行任意代码(引入潜在的巨大安全漏洞).pickle不擅长处理大型数据,例如大型numpy数组。joblib包通过专门处理pickle处理此类数组来解决这一问题。很遗憾……感谢您的回答注意,pickle存在隐式序列化格式的所有问题(即它可能是错误的)使用pickle读取数据可能会执行任意代码(引入潜在的巨大安全漏洞)。pickle不擅长处理大型数据,例如大型numpy数组。joblib包通过专门处理pickle处理此类数组来解决这一问题。