python序列化和反序列化

  

一概述

  

1为什么要序列化

  
  

因为TCP/IP协议只支持字节数组的传输,不能直接传对象。对象序列化的结果一定是字节数组!当两个进程在进行远程通信时,彼此可以发送各种类型的数据,无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。

     

2序列化和反序列化

  
  

序列化(序列化):及有序的列,数据转换成二进制的有序的过程
协议:规定序列化和反序列化的转换方式及就是把数据保存成二进制存储起来,其是定义的规则,其规则称为协议如果规定了协议,则可以进行序列化和反序列化,其协议是由版本的,约定协议后进行处理

  

反序列化(反序列化):将有序的二进制序列转换成某种对象(字典,列表等)称为反序列化

  

持久化:序列化保存到文件就是持久化,序列化未必会持久化,序列化往往是传输或存储。可以将数据序列化后持久化,或者网络传输,也可以将从文件或网络接受到的字节序列反序列化。

     

二python泡菜

  

1概述

  
  python中

泡菜的序列化,反序列化模块,其局限是仅限于传输的两端都是python的情况,且尽量保持两端的版本一致

     

2泡菜库基本方法

  
  

转储对象序列化,在内存中
转储对象序列化到文件对象,就是存入文件
加载对象反序列化
负载对象反序列化,从文件中读取数据

     

3实例

  
 <代码> # !/usr/地方/bin/python3.6
  utf - 8编码:
  从进口泡菜*
  从pathlib导入路径
  lst=' a b c d ' .split() #返回一个列的表
  d=dict (zip (abcd,范围(4)))#构建一个字典
  打印(lst, d) #打印字典和列的表
  p=路径(/根/test.py)
  如果不是p.parent.exists(): #创建文件的上级目录
  p.parent.mkdir(父母=True)
  张开(p, wb +) f: #进行序列化,必须是二进制的输入,否则会报的错
  转储(lst, f)
  转储(d, f)
  张开(p, rb) f: #此处对应的是二进制的输出
  打印(负载(f))
  打印(负载(f))  
  

结果如下

  

 python序列化和反序列化

  
 <代码> # !/usr/地方/bin/python3.6
  utf - 8编码:
  从进口泡菜*
  从pathlib导入路径
  d=dict (zip (mysql,范围(5)))
  s=转储(d) #进行序列化
  打印(s) #正常情况的输出
  打印(加载(s)) #进行反序列化并输出 
  

结果如下
 python序列化和反序列化

  

切换3.5环境进行查看处理
 python序列化和反序列化

  

对类的处理

  
 <代码> # !/usr/地方/bin/python3.6
  utf - 8编码:
  从进口泡菜*
  从pathlib导入路径
  类():#创建一个类
  def显示(自我):
  打印(“aaaa”)=()#对类进行实例化
  张开('/根/test1.py ', ' wb + ') f: #将实例化后的类的对象使用序列化写入到文件中
  转储(f)
  张开(/根/test1.py, rb) f: #将对象的结果进行查看
  x=负载(f)
  x.show()  
  

结果如下

  

 python序列化和反序列化

  

 python序列化和反序列化

  
 <代码> # !/usr/地方/bin/python3.6
  utf - 8编码:
  从进口泡菜*
  从pathlib导入路径
  类():#创建一个类
  def显示(自我):
  打印(“aaaa”)
  打印(“bbbbb”)=()#对类进行实例化
  张开('/根/test1.py ', ' wb + ') f: #将实例化后的类的对象使用序列化写入到文件中
  转储(f)
  张开(/根/test1.py, rb) f: #将对象的结果进行查看
  x=负载(f)
  x.show() #调用类的方法 
  

查看结果
 python序列化和反序列化”> <br/>写入的数据如下<br/> <img src=

python序列化和反序列化