Python中pickle序列化与反序列化

21 篇文章 0 订阅

原文地址

  • 序列化/反序列化

    将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化

  • pickle

    pickle模块实现了用于对Python对象结构进行 序列化 和 反序列化 的二进制协议,与json模块不同的是pickle模块序列化和反序列化的过程分别叫做 pickling 和 unpickling:

    • pickling: 是将Python对象转换为字节流的过程;
    • unpickling: 是将字节流二进制文件或字节对象转换回Python对象的过程
  • 使用示例

    • 导入模块

      import pickle
      
    • 生成测试数据

      obj = {1:'a', 2:'b'}
      
    • 序列化——dumps

      将指定的Python对象通过pickle序列化作为bytes对象返回

      pickleobj = pickle.dumps(obj)
      # b'\x80\x03}q\x00(K\x01X\x01\x00\x00\x00aq\x01K\x02X\x01\x00\x00\x00bq\x02u.'
      
    • 反序列化——loads

      将通过pickle序列化后得到的字节对象进行反序列化,转换为Python对象并返回

      reobj = pickle.loads(pickleobj)
      # {1: 'a', 2: 'b'}
      
    • 序列化——dump

      将指定的Python对象通过pickle序列化后写入打开的文件对象中,等价于Pickler(file, protocol).dump(obj)

      注意与上面dumps的区别

      with open('../data/pickle.txt', 'wb') as f:
          pickle.dump(obj, f)
      with open('../data/pickle.data', 'wb') as f:	# 可以自己指定后缀
          pickle.dump(obj, f)
      
    • 反序列化——load

      从打开的文件对象中读取pickled对象表现形式并返回通过pickle反序列化后得到的Python对象

      with open('../data/pickle.txt', 'rb') as f:
          res1 = pickle.load(f)
      print(type(res1))   # <class 'dict'>
      print(res1)         # {1: 'a', 2: 'b'}
      with open('../data/pickle.data', 'rb') as f:
          res2 = pickle.load(f)
      print(type(res2))   # <class 'dict'>
      print(res2)         # {1: 'a', 2: 'b'}
      
  • 参考文献

    Python之数据序列化(json、pickle、shelve)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BBJG_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值