Получение данных с помощью openstacksdk из объектного хранилища openstack

Я пытаюсь получить данные рассола, которые я загрузил в хранилище объектов openstack, используя openstacksdk's connection.get_object(container,object), Я получаю от него ответ, однако тело файла представляет собой строку, я даже могу без проблем сохранить ее в файл с опцией Outfile. Однако я хотел бы иметь возможность работать с ним напрямую, без необходимости сначала сохранять его в файл, а затем загружать его в рассол.

Простое использование pickle load и load не работает, поскольку ни один из них не принимает строковые объекты. Есть ли другой способ получить данные, чтобы я мог работать с маринованными данными напрямую, или есть способ проанализировать строку / установить параметр конфигурации в get_object()?

2 ответа

РЕДАКТИРОВАТЬ: Я нашел решение для маринованных объектов или любых других файлов, полученных из openstack с помощью openstacksdk, есть несколько способов работы с данными, не прибегая к диску.

Сначала мое реализованное решение заключалось в использовании метода подключения 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 из объекта соединения.

Если вы используете Python 3 - pickleожидает байтовый объект. Метод загрузки принимает путь к файлу и полагается на file тип для обработки предоставления bytes Вернуться в pickle. Когда вы используете loads метод, вам необходимо предоставить ему bytes-like object, а не строку, поэтому вам нужно будет преобразовать строку в байты.

Лучший способ преобразовать строку в байты в Python 3?

Другие вопросы по тегам