第十章、json和pickle模块

一、序列化

把对象(变量)从内存中变成可存储或传输的过程称之为序列化,

序列化优点:

  1. 持久保存状态:内存本身无法保存数据的,当运行了一段时间,我们断电或者重启程序,内存关于这个程序之前的一段时间的数据都被清空了。但是断电或者重启程序之前将程序当前的所有数据都保存在文件中了,下次运行程序的时候还能载入之前保存在文件的数据,这就是序列化。
  2. 跨平台数据交互:序列化时不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。

二、json

json序列化

json数据类型和python数据类型对应关系表

Json类型 Python类型
{} dict
[] list
"string" str
520.13 int或float
true/false True/False
null None

反序列化和序列化的一个过程如图

import json
struct_data={"a":1,"b":2,"c":3}
print(struct_data)
json_data=json.dumps(struct_data)
#{'a': 1, 'b': 2, 'c': 3}
with open("json序列化.json","w") as fw:
json.dump(struct_data,fw)
#生成了json文件
with open("json序列化.json") as fr:
data_load=json.load(fr)
print(data_load)#{'a': 1, 'b': 2, 'c': 3}
#反序列化json文件

三、pickle模块

和json区别在于:pickle的可以存储Python中的所有的数据类型,包括对象,而json不可以。 pickle不能跨平台,甚至不同版本python也不能兼容

#序列化内存中的数据
import pickle
struct_data={"a":1,"b":2,"c":3}
print(struct_data)
pickle_data=pickle.dumps(struct_data)
print(pickle_data)
#b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02X\x01\x00\x00\x00cq\x03K\x03u.'
#反序列化内存中的数据
pickle_data=pickle.loads(pickle_data)
print(pickle_data)
#{'a': 1, 'b': 2, 'c': 3}
#pickle模块需要使用二进制存储,即'wb'模式存储
#序列化数据,保存在文件中
with open("pick序列化对象.pkl","wb") as fw:
pickle.dump(struct_data,fw)
#生成了pkl文件
#反序列化文件中的数据
with open('Pickle序列化对象.pkl', 'rb') as fr:
pickle_data = pickle.load(fr)
print(pickle_data)
#{'a': 1, 'b': 2, 'c': 3}

最新文章

  1. 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
  2. 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) E
  3. 使用js给页面显示的图片添加水印效果
  4. MIT 2012分布式课程基础源码解析一-源码概述
  5. [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题
  6. 关于PS里图层样式的全局光
  7. Linux(CentOS6.5) 开放端口,配置防火墙
  8. 你会用swift创建复杂的加载动画吗(1)
  9. Finding awesome developers in programming interviews(转)
  10. Metadata Service 架构详解 - 每天5分钟玩转 OpenStack(165)
  11. 随机四则运算的出题程序java
  12. [日常] imap协议读取邮件
  13. UE4C++定义属性修饰符总结
  14. python全栈开发 * 36知识点汇总 * 180721
  15. 关于java中Pattern和Matcher区别于联系
  16. Spring整体了解
  17. exception java.lang.OutOfMemoryError: Java heap space
  18. LeetCode:整数反转(Reserve Integer)
  19. MapReduce初探
  20. 实现VMware下CentOS和Windows之间的复制粘贴

热门文章

  1. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用
  2. 1、vinc = vict 胜、征服
  3. 安装python3.6并使用virtualenvwrapper管理虚环境
  4. 【笔记】7天玩转容器&CKA管理员实训
  5. 【C/C++开发】【Java开发】JNI的替代者—使用JNA访问Java外部功能接口
  6. 【ARM-Linux开发】Linux的SOCKET编程详解
  7. 【计算机视觉】time of flight (TOF)
  8. Java垃圾收集算法1
  9. 修改umask后apache报错:because search permissions are missing on a component of the path,
  10. Linux下的I/O复用与epoll详解(转载)