首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法pickle StringO对象(在尝试序列化从librsync-python模块返回的签名时)

无法pickle StringO对象(在尝试序列化从librsync-python模块返回的签名时)
EN

Stack Overflow用户
提问于 2015-03-07 01:29:16
回答 2查看 1.2K关注 0票数 1

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

代码语言:javascript
复制
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模块的扩展版本。将其添加为答案。

EN

回答 2

Stack Overflow用户

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2015-03-07 04:17:21

您不希望pickle StringIO对象,而是希望pickle签名的值。您需要获取对象的内容:

代码语言:javascript
复制
signature_bytes = librsync.signature(dst).getvalue()
pickle(dict(sig=signature_bytes))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28904299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档