Получение данных с помощью 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
, а не строку, поэтому вам нужно будет преобразовать строку в байты.