You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的OpenStack库获取指定容器的对象列表?

解决OpenStack SDK获取容器对象列表的问题

Hey Méric, 很高兴能帮你解决这个问题~

你之前用conn.get_container('container_name')[1]的方式失效,大概率是因为OpenStack SDK(openstacksdk)的API设计更新了,现在更推荐使用面向对象的方式来操作,不仅可读性更强,还能避免字典键名写错或者返回结构变化的问题。

最优实现方法

方式一:先获取容器对象再遍历(推荐)

这种方式更符合SDK的设计逻辑,返回的是封装好的对象实例,直接访问属性即可:

# 建立连接后,先获取目标容器对象
target_container = conn.object_store.get_container(name='container_name')

# 遍历容器内的所有对象
for obj in conn.object_store.objects(container=target_container):
    # 直接访问对象的属性,不用字典取值
    print(f"{obj.name}\t{obj.bytes}\t{obj.last_modified}")

方式二:直接传入容器名称遍历

如果不需要单独操作容器对象,也可以直接把容器名字传给objects方法,更简洁:

for obj in conn.object_store.objects(container='container_name'):
    print(f"{obj.name}\t{obj.bytes}\t{obj.last_modified}")

为什么这个方法更好?

  • 可读性更强:面向对象的写法更直观,不用记住字典的键名(比如不用纠结是data['bytes']还是data['size'])
  • 自动处理分页:如果你的容器里有大量对象,SDK会自动帮你处理分页逻辑,不用自己手动拼接分页参数
  • 更稳定:SDK的对象属性是固定的,不像字典结构可能随版本更新变化,减少后续维护的麻烦

如果你偏好字典形式的返回

如果一定要用字典来处理数据,可以调用对象的to_dict()方法转换:

for obj in conn.object_store.objects(container='container_name'):
    obj_dict = obj.to_dict()
    print(f"{obj_dict['name']}\t{obj_dict['bytes']}\t{obj_dict['last_modified']}")

最后提醒一下,确保你的openstacksdk是最新版本,避免因为版本兼容问题导致的错误:

pip install --upgrade openstacksdk

内容的提问来源于stack exchange,提问作者Meric NESSANGE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:12:57