python序列化与反序列化(json与pickle)
在python中,序列化可以理解为将python中对象的编码格式转换为json(pickle)格式的字符串,而反序列化可以 理解为将json(pickle)格式的字符串转换为python中对象的编码格式
举一个简单的例子,我们在vmvare环境下编写python程序,然后需要临时走开一下,但是我们又不想把这个vmvare关闭,这个时候我们可以选择挂机,这样我们再回来继续操作时候,就可以直接恢复到走之前的状态,那么我们之前编写的代码及vmvare的状态是保存在哪里了呢,实际上是保存在文件当中来了,但是我们知道文件只能对字符串这种类型的数据进行处理,这时候在操作过程中,当我们将数据存入文件当中的时候,我们就需要将python对象的编码格式转换成字符串格式,即序列化,同样的,当我们在恢复python中的编码时候,就需要把字符串的编码格式转换成我们需要的编码格式,即所谓的反序列化。而恰好python中的json和pickle模块可以用来实现这一功能
json
json提供了四个功能:dumps,dump,loads,load(前面两个都是用来实现序列化的,后面两个用来实现反序列化)
首先我们来看一下如果不用json序列化到底能不能实现对文件的操作
我们创建一个文件,向里面存入一个字典看看行不行

结果呢

很明显报错了,告诉我们写进文件的内容一定得是字符串格式的,不是字典。
我们试着用json模块写入吧

结果创建了一个文件,并且相应的内容也写进去了

上面我们用了json的dumps功能实现的序列化,我们再用dump实现一下,代码简化了

结果是一样的
我们再来看看反序列化
如果我们不用反序列化,看看能不能找到字典中的name对应的额元素呢


结果是不可以的
那我们来导入json模块吧


我们再用json的另一个反序列化功能load写一下这段代码

结果是一样的
看起来json的功能很强大但是他只能用来实现对列表,字典,字符串这样简单的数据类型进行处理,对于复杂的比如函数就处理不了了,但是他有他的优点,就是可以实现与java等其他语言的交互,鉴于json的局限性,我们试一试pickle吧,他能实现对一切对象的序列化及反序列化操作,但是他不能实现与其他语言的交互
我们先来看看json遇到复杂对象的情况,为此我们定义了一个niusha函数,将他的内存地址添加到字典中

结果似乎差强人意啊

报错了
我们再用pickle试试

结果怎么变成了这样

注意哈,这里我们用pickle.dumps默认变成了二进制。所以报错了。我们需要改动一下

将文件的写的方式改为“wb”即可
我们再来看看pickle的反序列化

结果怎么出错了呢

这是因为我们在序列化中定义的niusha函数,使用完之后就被释放了,所以我们在反序列化过程中找不到这个函数,这里我们是为了证明pickle可以序列化函数等复杂的对象,在实际中是不应该这样用的,如果是在要这么用,我们只能将序列化中的代码copy过来

这样结果就出来了

注意,这里我们都只是尝试了pickle的dump,与load方法,他的dumps功能与loads功能与json用法是一样的,这里就不再描述了
python序列化与反序列化(json与pickle)的更多相关文章
- Python序列化与反序列化-json与pickle
Python序列化与反序列化-json与pickle 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.json的序列化方式与反序列化方式 1>.json序列化 #!/usr ...
- python 序列化模块之 json 和 pickle
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,支持不同程序之间的数据转换.但是只能转换简单的类型如:(列表.字典.字符串. ...
- Python 序列化模块(json,pickle,shelve)
json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集. 常用方法 ...
- Python序列化和反序列化
Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...
- python常用模块之json、pickle模块
python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...
- C#序列化及反序列化Json对象通用类JsonHelper
当今的程序界Json大行其道.因为Json对象具有简短高效等优势,广受广大C#码农喜爱.这里发一个序列化及反序列化Json对象通用类库,希望对大家有用. public class JsonHelper ...
- Jackson序列化和反序列化Json数据完整示例
Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会 ...
- (推荐JsonConvert )序列化和反序列化Json
在Json文本和.Net对象之间转换最快的方法是试用JsonSerializer. JsonSerializer通过将.Net对象属性名称映射到Json属性名称,并为其复制值,将.Net对象转换为其J ...
- python序列化与反序列化(json、pickle)-(五)
1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据 ...
随机推荐
- VS2019 离线安装方法详解
本文详细介绍了 VS2019 离线安装的相关步骤,以桌面开发为主下载 C++桌面开发..NET 桌面开发相关的工作负载.MFC 可选组件及帮助查看器. 工作负载(Workload) 离线安装需要先根据 ...
- windows 分页缓冲池 非分页缓冲池
最近在windows server 2012机器上在做性能测试时,发现8G物理内存,内存使用率占到了90%多,在“进程”列表中所有进程内存相加才2个多G,同时任务管理器->“性能”标签一项中,非 ...
- AirPods 2 & Android
AirPods 2 & Android AirBattery https://play.google.com/store/apps/details?id=friedrich.georg.air ...
- Nginx 过滤sub模块
L70 通过 --with-http_sub_module 编译进nginx sub_filter 指令 Syntax: sub_filter string replacement; Default: ...
- 【12】Django 中间件
前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- postgresSQL 实现数据修改后,自动更新updated_date/ts等字段
1. 需求说明: 实现MYSQL中有on update CURRENT_TIMESTAMP 2. 需求分析 由于数据库迁移需要将MYSQL中的数据迁移到postgresSQL中,由于MYSQL中有on ...
- content-type 组件
content-type初识 什么是content-type ContentType是Django的内置的一个应用,可以追踪项目中所有的APP和model的对应关系,并记录在ContentType表中 ...
- 自定义滚动条样式-transition无效
问题 需求是自定义滚动条样式,然后2秒内无操作隐藏滚动条. 2s内隐藏比较麻烦,不能用css实现,只能监听容器的touch事件,然后给滚动条加个opacity: 0的class. .class::-w ...
- linux查看主板型号、CPU、显卡、硬盘等信息
系统 uname -a # 查看内核/操作系统/CPU信息 head -n 1 /etc/issue # 查看操作系统版本 cat /proc/cpuinfo # 查看CPU信息 hostname # ...