返回介绍

pickle对象序列化模块

发布于 2024-01-29 22:24:14 字数 1172 浏览 0 评论 0 收藏 0

我们在本书第9章和第30章简单介绍了pickle模块。在第27章,我们也使用了shelve模块,它实际上使用了pickle。这里为了完整起见,别忘了pickle模块的Python 3.0版本总是创建一个bytes对象,而不管默认的或传入的“协议”(数据格式化层级)。我们通过使用该模块的dumps调用来返回一个对象的pickle字符串,从而查看这一点:

这意味着,用来存储pickle化的对象的文件必须总是在Python 3.0中以二进制模式打开,因为文本文件使用str字符串来表示数据,而不是bytes——dump调用直接试图把pickle字符串写入一个打开的输出文件中:

由于pickle数据不是可解码的Unicode文本,所以对于输出也是如此——在Python 3.0中的正确用法总是要求以二进制模式写入和读取pickle数据:

在Python 2.6(和更早的版本)中,我们可以使用文本模式文件来获得pickle化的数据,只要协议是0层级(Python 2.6中默认的协议)并且我们使用文本模式一致地转换行尾:

如果你关注版本独立,或者不想要关心协议或者其特定版本的默认值,总是对pickle化的数据使用二进制模式文件,如下的做法在Python 3.0和Python 2.6中都有效:

由于几乎所有的程序都允许Python自动地pickle或unpikle对象,并且不会处理pickle化的数据自身的内容,总是使用二进制文件模式的要求是Python 3的新pickle化模式中唯一显著的不兼容。参阅参考书籍或Python的手册,来了解关于对象pickle化的更多细节。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文