1. 什么是序列化?

当程序运行时,所有的变量或者对象都是存储到内存中的,一旦程序调用完成,这些变量或者对象所占有的内存都会被回收。而为了实现变量和对象持久化的存储到磁盘中或在网络上进行传输,我们需要将变量或者对象转化为二进制流的方式。 而将其转化为二进制流的过程就是序列化。

2. 什么是反序列化

而反序列化就是说程序运行的时候不能从磁盘中进行读取,需要将序列化的对象或者变量从磁盘中转移到内存中,同时也会将二进制流转换为原来的数据格式。我们把这一过程叫做反序列化。

3. python如何实现序列化和反序列化

这里主要讲两个模块pickle模块和json模块

3.1 pickle模块

dump(object)和dumps(objects)是序列化 load(byte)和loads(byte)是反序列化

import pickledict1 = {'a': 1, 'b': 2}
dict2 = pickle.dumps(dict1)
print(dict2,type(dict2),id(dict2))
dict3 = pickle.loads(dict2)
print(dict3,type(dict3),id(dict3))
复制代码

D:\python\Python36\python.exe E:/demo/-python-/handlers/test.py b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.' <class 'bytes'> 1536157390816 {'a': 1, 'b': 2} <class 'dict'> 1536043176080

输出结果可以看出两者在内存中的地址并不相同,原因是我们在将字典序列化后,字典调用结束确实在内存中释放了,而反序列化后又从磁盘中取出并在内存中重新划分了一块内存,因此地址显示不同。

dump和load是序列化和反序列化到文件中去

import pickle
import osdict1 = {'a': 1, 'b': 2}
file = open(os.path.join(os.path.abspath('.'), '1.txt'), 'wb')
dict2 = pickle.dump(dict1, file)
file.close()
print(dict2, type(dict2), id(dict2))
file1 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'rb')
dict3 = pickle.load(file1)
file1.close()
print(dict3, type(dict3), id(dict3))
复制代码

None <class 'NoneType'> 1805423824 {'a': 1, 'b': 2} <class 'dict'> 2622050204264

3.2 json模块

json.dumps:将python格式转化为json的字符串形式 json.loads:将json的字符串格式转换为python的数据格式

import jsondict1 = {'a': 1, 'b': 2}
dict2 = json.dumps(dict1)
print(dict2, type(dict2), id(dict2))
dict3 = json.loads(dict2)
print(dict3, type(dict3), id(dict3))
复制代码

{"a": 1, "b": 2} <class 'str'> 2040970141536 {'a': 1, 'b': 2} <class 'dict'> 2040937894392

json.dump:序列化到文件中 json.load: 将文件中的内容反序列化

import osdict1 = {'a': 1, 'b': 2}
file1 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'w')
dict2 = json.dump(dict1, file1)
file1.close()
print(dict2, type(dict2), id(dict2))
file2 = open(os.path.join(os.path.abspath('.'), '1.txt'), 'r')
dict3 = json.load(file2)
print(dict3, type(dict3), id(dict3))
复制代码

None <class 'NoneType'> 1805423824 {'a': 1, 'b': 2} <class 'dict'> 1907991182648

参考:blog.csdn.net/reuxfhc/art… blog.csdn.net/u012993796/…

转载于:https://juejin.im/post/5be4e7b5e51d4535b07d1590

python的序列化和反序列化相关推荐

  1. Python的序列化与反序列化

    序列化和反序列化可以大致分为两类:文本序列化和二进制序列化.比如python提供的pickle库,他就是基于二进制方式的序列化.而json则是文本方式的序列化,需要遵守相应的文件格式. 由于pickl ...

  2. Python Json序列化与反序列化

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...

  3. python之序列化与反序列化用法介绍json、pickle

    1.什么是序列化和反序列化 序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于网络传输 反序列化就是硬盘中或者网络传来的一种数据格式转换成内存中数据结构 2.为啥有呢?   1.可以保存 ...

  4. python保存任意object的数据到本地(python的序列化与反序列化)

    这里主要使用pickle这个库: python对象保存到本地(序列化) pickle.dump(python对象, open("文件名", 'wb')) # 序列化 从本地读取py ...

  5. python代码实现二叉树的序列化和反序列化

    python代码实现二叉树的序列化和反序列化 二叉树的序列化 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字 符串,从而使得内存中建立起来的二叉树可以持久保存. 二叉树的反序 ...

  6. python序列化和反序列化ppt_老生常谈Python序列化和反序列化

    通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功能. pickle模块 存储在 ...

  7. python 元组 字典 列表 序列化与反序列化

    在python中,序列化是指把Python的对象编码转化为JSON格式的字符串:反序列化则是相反,是把JSON格式的字符串解码为Python数据对象.其中专门提供了JSON库来处理这个过程. 一.JS ...

  8. python序列化和反序列化_python反序列化免杀

    在日常的渗透行动当中,当我们对目标进行内网横向渗透时很不幸的是内网一般往往都会部署防火墙.流量监控等设备,杀软更是成为了服务器的标配,所以如何进行免杀绕过杀毒软件的限制让主机上线成了我们首要解决的问题 ...

  9. python中常用的序列化模块_Python中的序列化和反序列化

    为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...

最新文章

  1. PyTorch报错No module named ‘transforms‘
  2. php显示mysql数据实例_php 连接mysql数据库并显示数据 实例 转载 aoguren
  3. 【转】深入浅出PageRank算法
  4. html中如何让三个方块并排,html – 并排设置两个div,然后设置第三个div
  5. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源
  6. flutter创建一个demo
  7. 【MATLAB】饼图
  8. ios换肤思想,及工具类
  9. 【读书笔记《Android游戏编程之从零开始》】13.游戏开发基础(Paint 画笔)
  10. 【DM】DMHS的安装部署及DM7的二节点同步
  11. Hash散列算法详细解析(六)
  12. Python数据爬虫学习笔记(11)爬取千图网图片数据
  13. 微信小程序上传图像或者文件到阿里云oss
  14. 我想推出这么一种应用(现代诗歌)
  15. 32位操作系统升级为64位步奏
  16. 软件设计师考试重点知识点梳理
  17. RDBMS(关系型数据库)与HBase的对比
  18. 关于onMeasure(转载)
  19. Python实现正无穷 负无穷赋值
  20. 收购WindRiver,Wintel变成Gootel

热门文章

  1. shell脚本详解(七)——正则表达式、sort、uniq、tr
  2. awk 截取部分字符串_linux三剑客-awk
  3. InputStream与DataInputStream区别
  4. 学报格式和论文格式一样吗_学报投稿格式有哪些
  5. a5松下驱动器参数设置表_松下伺服几个参数需要熟悉并掌握设置方法
  6. php扩展dio,PHP Dio扩展新函数dio_fdopen参数返回--bad file descriptor的分
  7. mysql gitd 数据结构同步失败_Mysql5.7版本Gtid复制出现不同步的情况
  8. Mysql从库主键卡住_从库宕机引发的主键冲突
  9. liferay 采用URL方式传值
  10. Spring Cloud Alibaba 简介