第八章 Python文件操作 05-pickle库

pickle库

程序在运行的过程中,会在内存中存储很多的数据。这些数据会随着程序的结束而被释放掉。那如果我们希望下一次程序启动起来之后,依然能够使用到这些内存中的数据该怎么办呢?我们就需要将内存中的数据以文件的形式保存下来,下一次程序启动的时候,可以直接读取这个文件中的数据,加载到内存中继续使用。

在这里需要涉及到两个概念:

  • **序列化:**就是将内存中的对象,转成字节序列的形式。然后可以将这些字节序列保存到文件中,或者传递给网络中的其他的机器。
  • **反序列化:**就是通过一个字节序列,将其中的数据读取到内存中。

而pickle库,就是来实现序列化和反序列化的操作的!

import pickle


# pickle库是一个用来将内存中的数据转成字节序列,存储到文件中的库,通常以.pkl为后缀
# 序列化:将内存中的数据,转成字节序列
# 反序列化:将字节序列的数据解析成内存中的数据

# 序列化:dump
# 反序列化:load

with open("./file/data.pkl", "wb") as write_stream:
    pickle.dump(10, write_stream)
    pickle.dump("10", write_stream)
    pickle.dump(b"10", write_stream)
    pickle.dump([10, 20], write_stream)
    pickle.dump({"key": "value"}, write_stream)


with open("./file/data.pkl", "rb") as read_stream:
    value1 = pickle.load(read_stream)
    value2 = pickle.load(read_stream)
    value3 = pickle.load(read_stream)
    value4 = pickle.load(read_stream)
    value5 = pickle.load(read_stream)
    print(type(value1), value1)
    print(type(value2), value2)
    print(type(value3), value3)
    print(type(value4), value4)
    print(type(value5), value5)

注意事项:

在使用dump和load进行序列化和反序列化的时候,需要保证dump的次数和load的次数、顺序是相同的。

使用dump在序列化对象的时候,操作的个数是不确定的,会导致load的次数也就不确定了。

  • 如果load次数少了,会导致数据没有完全读取。
  • 如果load次数多了,会出现异常

那么如何解决这样的问题呢?

最简单也是最常见的解决方式就是:将需要序列化的所有的对象存储到一个数据容器中,将这个数据容器序列化就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值