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
是{{1}}模块的扩展版本。
添加它作为答案。
答案 0 :(得分:2)
我是问题的作者,这是对我有用的解决方案。
来自http://www.ibm.com/developerworks/library/l-pypers/
Python无法挑选文件对象(或任何带引号的对象) 一个文件对象),因为Python不能保证它可以重新创建 在取消打印时文件的状态。
来自https://pypi.python.org/pypi/dill
Dill扩展了python的'pickle'模块,用于序列化和 将python对象反序列化为大多数内置python 类型。
使用dill
,我可以序列化返回的签名对象。
https://github.com/uqfoundation/dill
答案 1 :(得分:1)
您不想挑选StringIO对象,而是签名的值。您需要获取对象的内容:
signature_bytes = librsync.signature(dst).getvalue()
pickle(dict(sig=signature_bytes))