【发布时间】:2018-10-03 15:17:14
【问题描述】:
我正在使用pickle.dumps() 保存一个列表,如下所示:
my_list = ['Hello', 'I', 'Have', 'a', 'question', 'camión']
my_pickle = pickle.dumps(my_list)
创建泡菜后,我会将其上传到 Azure Batch 中的容器:
blob_service.block_service.create_blob_from_bytes('containername', 'filename', my_pickle)
然后拿回来:
my_bytes = blob_service.block_service.get_blob_to_bytes('containername', 'filename')
我想要的 (my_list) 在 my_bytes.content 里面,如果我打印出来,我会得到:
b'\x80\x03]q\x00(X\x05\x00\x00\x00Helloq\x01X\x01\x00\x00\x00Iq\x02X\x04\x00\x00\x00Haveq\x03X\x01\x00\x00\x00aq\x04X\x08\x00\x00\x00questionq\x05X\x07\x00\x00\x00cami\xc3\xb3nq\x06e.'
为了让my_bytes回到列表中,我尝试将其解码如下:
my_bytes.decode('utf-8')
但我收到以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
其他编码,如latin-1,不报错但返回
'\x80\x03]q\x00(X\x05\x00\x00\x00Helloq\x01X\x01\x00\x00\x00Iq\x02X\x04\x00\x00\x00Haveq\x03X\x01\x00\x00\x00aq\x04X\x08\x00\x00\x00questionq\x05X\x07\x00\x00\x00camiónq\x06e.'
而不是my_list。
我在 Internet 上进行了搜索以找出发生这种情况的原因,但找不到任何对我有帮助的东西,因此非常欢迎任何建议或建议。我想从my_bytes 得到my_list。请注意,我对如何解码 my_bytes 感兴趣。
【问题讨论】:
-
如果使用 pickle.dumps 将列表编码为字节,则使用 pickle.loads 将字节解码为列表。为什么你会有其他想法? @Auqarthur 是正确的。
-
我正在将我的泡菜文件上传到 Azure Batch,当我尝试使用
blob_service.block_service.get_blob_to_bytes()从那里取回它时,它返回的字节数如my_bytes所示,我试图弄清楚如何从my_biyes获取my_list。据我所知,我不能再使用pickle,因为我的文件不会在本地... -
当然可以。
-
@Mark Tolonen 我已经编辑了我的问题,你介意看看它并指出我应该在
pickle.load()中传递什么吗? -
my_list = pickle.loads(my_bytes.content)。注意loads(从字符串加载)不是load(从文件加载)。