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文件。如何保存此签名对象以供将来使用?
更新:我试图对对象进行pickle处理,但它显示为TypeError: can't pickle StringO objects。
更新2:返回的签名对象引用了一个文件对象。Python不能pickle文件对象。我使用dill解决了这个问题,它是pickle模块的扩展版本。将其添加为答案。
发布于 2015-03-07 03:13:22
我是这个问题的作者,这就是对我有效的解决方案。
来自http://www.ibm.com/developerworks/library/l-pypers/
Python不能pickle文件对象(或任何引用了文件对象的对象),因为
不能保证它可以在取消pickle时重新创建文件的状态。
来自https://pypi.python.org/pypi/dill
python扩展了
的‘pickle’模块,用于序列化和反序列化python对象到大多数内置的python类型。
使用dill,我可以序列化返回的签名对象。https://github.com/uqfoundation/dill
发布于 2015-03-07 04:17:21
您不希望pickle StringIO对象,而是希望pickle签名的值。您需要获取对象的内容:
signature_bytes = librsync.signature(dst).getvalue()
pickle(dict(sig=signature_bytes))https://stackoverflow.com/questions/28904299
复制相似问题