使用 openstacksdk 从 openstack 的对象存储中检索数据

Retrieving data with openstacksdk from openstack's object storage

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

简单地使用 pickle 的 load 和 loads 是行不通的,因为两者都不接受字符串对象。是否有另一种方法来检索数据以便我可以直接使用腌制数据,或者是否有某种方法可以解析 string/set get_object() 上的配置参数?

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

Best way to convert string to bytes in Python 3?

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

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

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

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

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