Не могу выбрать объекты 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))