【问题标题】:Retrieving data with openstacksdk from openstack's object storage使用 openstacksdk 从 openstack 的对象存储中检索数据
【发布时间】:2020-11-19 05:10:48
【问题描述】:

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

仅使用 pickle 的加载和加载不起作用,因为两者都不接受字符串对象。是否有另一种方法来检索数据,以便我可以直接使用腌制数据,或者是否有某种方法可以解析字符串/在 get_object() 上设置配置参数?

【问题讨论】:

    标签: python pickle openstack openstacksdk


    【解决方案1】:

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

    Best way to convert string to bytes in Python 3?

    【讨论】:

    • 似乎问题是数据在写入时使用“wb”标志保存。在您提供的答案中使用建议的解决方案并不能正确编码。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2018-11-04
      相关资源
      最近更新 更多