python 序列化和反序列化

本文介绍了Python中的序列化和反序列化概念,包括为什么需要序列化,以及序列化和反序列化的过程。详细讲解了Python内置的pickle模块以及JSON格式,包括它们的基本方法、应用实例和注意事项。此外,还提到了第三方库messagepack,它是一个高效的对象序列化库,支持多种编程语言,并与JSON和pickle兼容。
摘要由CSDN通过智能技术生成

一 概述

1 为什么要序列化

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

2 序列化和反序列化

序列化(serialization):及有序的列,数据转换成二进制的有序的过程

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

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

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

二 python pickle

1 概述

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

2 pickle 库基本方法

dumps 对象序列化,在内存中

dump 对象序列化到文件对象,就是存入文件

loads 对象反序列化

load 对象反序列化,从文件中读取数据

3 实例

#!/usr/local/bin/python3.6
#coding:utf-8
from  pickle import  *
from  pathlib  import Path
lst='a b c d'.split()  #返回一个列表
d=dict(zip('abcd',range(4)))  #构建一个字典
print (lst,d)  # 打印字典和列表
p=Path('/root/test.py')
if not  p.parent.exists():  # 创建文件的上级目录
    p.parent.mkdir(parents=True)
with  open(p,'wb+')   as  f:  #进行序列化,必须是二进制的输入,否则会报错
    dump(lst,f)
    dump(d,f)
with  open(p,'rb')  as  f: #此处对应的是二进制的输出
    print (load(f))
    print  (load(f))

结果如下

#!/usr/local/bin/python3.6
#coding:utf-8
from  pickle import  *
fro
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值