【发布时间】:2018-07-13 19:49:02
【问题描述】:
我正在尝试使用 msgpack 和 msgpack-numpy 序列化一些数据。我的代码如下:
import msgpack
import msgpack_numpy
msgpack_numpy.patch()
print(products[0]['data']['AMAZON_time'])
def decode_datetime(obj):
if b'__datetime__' in obj:
obj = datetime.datetime.strptime(obj[b'as_str'].decode(), "%Y%m%dT%H:%M:%S.%f")
return obj
def encode_datetime(obj):
if isinstance(obj, datetime.datetime):
obj = {'__datetime__': True, 'as_str':obj.strftime("%Y%m%dT%H:%M:%S.%f").encode()}
return obj
with open('bookData.msgpack','wb') as outfile:
msgpack.pack(products[0]['data']['AMAZON_time'],outfile,default=encode_datetime)
with open('bookData.msgpack','rb') as infile:
data = msgpack.unpack(infile,object_hook=decode_datetime)
这会引发以下错误:
ValueError: cannot create an OBJECT array from memory buffer
打印时,我尝试存储的对象如下所示:
[datetime.datetime(2017, 3, 23, 12, 44) datetime.datetime(2018, 6, 8, 6, 0)
datetime.datetime(2018, 6, 8, 8, 28) datetime.datetime(2018, 6, 8, 10, 8)
datetime.datetime(2018, 6, 8, 14, 56) datetime.datetime(2018, 6, 8, 21, 8)
datetime.datetime(2018, 6, 8, 21, 56)
datetime.datetime(2018, 6, 8, 23, 44) datetime.datetime(2018, 6, 9, 0, 36)]
但是,如果我打印products[0]['data'],我会得到包含dtype=Object 字样的东西(不确定这是否相关,但考虑到错误的措辞,我想我会提到它)。
知道我做错了什么吗?
编辑:我不知道它是否相关,但我可以用 pickle 保存和加载相同的数据。
【问题讨论】:
标签: python numpy datetime serialization msgpack