使用 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 中的输出文件参数。
我正在尝试使用 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 中的输出文件参数。