1

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添加它作为答案。

4

2 回答 2

2

我是问题的作者,这是对我有用的解决方案。

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

Python 不能 pickle 文件对象(或任何引用文件对象的对象),因为 Python 不能保证它可以在 unpickling 时重新创建文件的状态。

来自https://pypi.python.org/pypi/dill

Dill 扩展了 python 的“pickle”模块,用于序列化和反序列化 python 对象到大多数内置 python 类型。

使用dill,我可以序列化返回的签名对象。 https://github.com/uqfoundation/dill

于 2015-03-06T19:13:21.963 回答
1

您不想腌制 StringIO 对象,而是腌制签名的值。您需要获取对象的内容:

signature_bytes = librsync.signature(dst).getvalue()
pickle(dict(sig=signature_bytes))
于 2015-03-06T20:17:20.773 回答