0

我正在尝试使用 openstacksdk 检索已上传到 openstack 对象存储的泡菜数据connection.get_object(container,object),我得到了响应,但是文件正文是一个字符串,我什至可以使用 outfile 选项将其保存到文件中而不会出现问题。但是,我希望能够直接使用它,而不必先将其保存到文件中,然后再将其加载到 pickle 中。

简单地使用泡菜的负载和负载是行不通的,因为它们都不需要字符串对象。是否有另一种方法来检索数据,以便我可以直接处理腌制数据,或者是否有某种方法可以解析字符串/在 get_object() 上设置配置参数?

4

2 回答 2

0

如果您使用的是 Python 3 -pickle需要一个类似字节的对象load方法采用文件路径,并依赖于file类型来处理bytes返回到pickle. 当您使用该loads方法时,您需要为其提供一个bytes-like object,而不是字符串,因此您需要将字符串转换为字节。

在 Python 3 中将字符串转换为字节的最佳方法?

于 2020-11-19T07:59:12.033 回答
0

编辑:我找到了解决方案,对于使用 openstacksdk 从 openstack 检索到的腌制对象或任何其他文件,有几种方法可以在不借助磁盘的情况下处理数据。

首先我实现的解决方案是使用openstack的连接方法get_object_raw:

conn = connection(foo,bar, arg**) 
pickle.loads(conn.get_object_raw('containerName', 'ObjectName').content)

.get_object_raw 返回一个响应请求对象,其属性 content 是二进制文件内容,即可以用 pickle 加载的 pickle 内容。

您还可以使用 io.BytesIO 创建一个临时内存文件,并将其用作连接对象的 get_object 中的 outfile 参数。

于 2020-11-24T19:27:27.513 回答