Python序列化的Pickle

1 投票
3 回答
1046 浏览
提问于 2025-04-16 06:36

用简单的话来说,“序列化”是什么?我为什么需要它?我看过维基百科的解释,但还是不太明白。为什么我需要把数据转换成一串比特(0和1)才能把它存储到文件里?我特别想了解如何使用Python的pickle模块来进行序列化。

谢谢你的时间!

3 个回答

0

这是一个可以生成一些统计数据的程序,但数据量不大,所以用数据库来存储就有点过了。

比如说,你可以用它来测试一个程序,看看哪个算法效果最好。

完成测试后,它会画出一张图表。你可能不太喜欢这张图的样子。你可以把结果保存起来,然后在另一个脚本中读取这些结果(也许是在进行几次后续测试之后),然后根据自己的需要调整图表的显示方式。

1

让我用一些例子来解释一下...

假设你需要把一个字典传递给另一个在你当前的Python环境之外运行的Python进程(可能是其他项目或者在其他机器上)...

somelist = {1:1,2:2,3:3}

那么你该怎么把这个字典传递给那个进程呢?你不能把它转换成字符串,即使你能做到,转换回来也很麻烦...

如果你对这个字典进行“序列化”(也就是用一种特殊的方式保存它),它会变成

dumps({1: 1, 2: 2, 3: 3})
'(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.'

这种类似字符串的结构... 所以你可以通过网络发送它,或者用其他方式传递... 接收方可以再把它“反序列化”,这样就能恢复成原来的对象...

loads('(dp1\nI1\nI1\nsI2\nI2\nsI3\nI3\ns.')
{1: 1, 2: 2, 3: 3}
2

你可以保存程序的状态(特定对象的状态)。想象一下,你有一个程序,它可能运行很多小时甚至几天。使用pickle这个工具,你可以保存计算的状态,随时关闭程序,之后再继续计算。

你甚至可以把保存下来的对象通过邮件发送给其他人,他们可以继续计算或者查看你的结果。

我有时候会用pickle保存用户的偏好设置,或者在测验中保存上次问了哪些问题以及给出了什么答案。

撰写回答