Не могу выбрать объекты StringO (при попытке сериализации подписи, возвращенной из модуля librsync-python)

https://pypi.python.org/pypi/python-librsync/0.1-5

import librsync

# The destination file.
dst = file('Resume-v1.0.pdf', 'rb')

# Step 1: prepare signature of the destination file
signature = librsync.signature(dst)

Я хочу сохранить подпись в файле (желательно в виде словарной записи, используя pickle). Я хотел бы рассчитать delta файл потом. Как сохранить этот объект подписи для будущего использования?

Обновление: я пытался засолить объект, но он говорит TypeError: can't pickle StringO objects,

Обновление 2: возвращенный объект подписи имел ссылку на объект файла. Python не может засолить файловый объект. Я решил это используя dill которая является расширенной версией pickle модуль. Добавил это как ответ.

2 ответа

Я автор вопроса, и это решение, которое сработало для меня.

С http://www.ibm.com/developerworks/library/l-pypers/

Python не может выбрать объект файла (или любой объект со ссылкой на объект файла), потому что Python не может гарантировать, что он может воссоздать состояние файла после удаления.

С https://pypi.python.org/pypi/dill

Дилл расширяет модуль Python 'pickle' для сериализации и десериализации объектов Python для большинства встроенных типов Python.

С помощью dillЯ мог бы сериализовать объект подписи, который был возвращен. https://github.com/uqfoundation/dill

Вы не хотите выбирать объект StringIO, а скорее значение подписи. Вам необходимо получить содержимое объекта:

signature_bytes = librsync.signature(dst).getvalue()
pickle(dict(sig=signature_bytes))
Другие вопросы по тегам