python序列化对象和反序列化
1.首先不管哪种语言都会用到序列化和反序列化的过程,
2.序列化:把对象转换为字节序列的过程称为对象的序列化; 反序列化:把对象转换为字节序列的过程称为对象的序列化。
3.序列化的作用:把对象(变量)从内存中变成可存储或传输的二进制对象,序列化之后的内容就可以写入磁盘,或者通过网络传输到别的机器上,同理,反序列化实现,把变量内容从序列化的对象重新读取到内存
4.如何实现序列化?比如我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,例如xml,json。
json是标准的JavaScript语言的对象,其实就是字符串,可以被所有语言读取,也可以方便的存储到磁盘或者网络传输。
5.JSON和Python的关系?两者内置的数据类型对应关系如下
6.在python中json只能转换一部分对象。类,函数无法转换,就要用到pickle,但pickle只适用在python内部适用,shelve模块也是python内部使用
举例说明
1.想要把一个列表写进文件
import json
mq=[1,'e','r','m',4]
with open('json_te','w') as fm:
json.dump(mq,fm)
如下,不调用dumps序列化,则直接报错,write()的参数必须是str类型
import json
mq=[1,'e','r','m',4]
#mq=json.dumps(mq) with open('json_te','w') as fm:
fm.write(mq) #TypeError: write() argument must be str, not list
修改以上代码:执行成功
import json
mq=[1,'e','r','m',4]
mq=json.dumps(mq) with open('json_te','w') as fm:
fm.write(mq)
2.以上代码还可以用dump替代,体现了dump和dumps之间的区别
import json
mq=[1,'e','r','m',4]
with open('json_te','w') as fm:
json.dump(mq,fm)
3.对于从文件中读取该列表就体现了,反序列化的过程,如下过程,直接读取出来的是str,程序把文件内容作为一个长的字符串
import json
with open ('json_te','r') as fn:
con=fn.read()
print(type(con)) #<class 'str'>
print(con[2]) #'
4.以下对比,反序列化处理的结果
import json
with open ('json_te','r') as fn:
con=fn.read()
con=json.loads(con)
print(type(con)) #<class 'list'>
print(con[2]) # r
5.反序列化的另一种表达方式
import json
with open ('json_te','r') as fn:
con=json.load(fn)
print(type(con)) #<class 'list'>
6.json的dumps和loads,不能处理像函数/类,这就需要用到pickle
import json def addmd(a,b):
return int(a)+int(b) with open('pick_te','w') as fa:
json.dump(fa,addmd) #TypeError: <_io.TextIOWrapper name='pick_te' mode='w' encoding='cp936'> is not JSON serializable
对比以下用pickle实现
import pickle def addmd():
return 1+1
addmd=pickle.dumps(addmd)
with open('pick_te','wb') as fa:
fa.write(addmd
7.还有一个shelve模块,只有包含一个open函数,返回像字典一样的对象,直接实现文件中内容的修改添加,比JSON方便但是其他语言不通用。
import shelve
md=shelve.open('dict_t')
md['name']='xiaohong '
print(md['name']) #xiaohong
python序列化对象和反序列化的更多相关文章
- redis整合Spring之序列化对象与反序列化
写在最前面 1.Spring必须是4.2.6及以上版本才支持redis 2.jar包版本建议统一 需要准备jar包 1.aopalliance-1.0.jar 2.spring-data-common ...
- JAXB序列化对象与反序列化XML
1.什么是JAXB JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术. 该过程中,JAXB也提供 ...
- Python序列化和反序列化
Python序列化和反序列化 通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长.并且需要时可以再次将这个对象读取出来.Python中有几个常用模块可实现这一功 ...
- python序列化与反序列化(json与pickle)
在python中,序列化可以理解为将python中对象的编码格式转换为json(pickle)格式的字符串,而反序列化可以 理解为将json(pickle)格式的字符串转换为python中对象的编码格 ...
- python pickle模块的使用/将python数据对象序列化保存到文件中
# Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...
- Python 序列化与反序列化
序列化是为了将内存中的字典.列表.集合以及各种对象,保存到一个文件中(字节流).而反序列化是将字节流转化回原始的对象的一个过程. json库 序列化:json.dumps() 反序列化:json.lo ...
- python序列化与反序列化(json、pickle)-(五)
1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据 ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- ObjectOutputStream:对象的序列化流 ObjectInputStream:对象的反序列化流
package com.itheima.demo04.ObjectStream; import java.io.FileOutputStream; import java.io.IOException ...
随机推荐
- Spring中常见的设计模式——策略模式
策略模式(Strategy Pattern) 一.策略模式的应用场景 策略模式的应用场景如下: 系统中有很多类,而他们的区别仅仅在于行为不同. 一个系统需要动态的在集中算法中选择一种 二.用策略模式实 ...
- 一起来立Flag吧!超炫的数据图表分析 2020 年 Java 技术趋势
引言 2020 来了,第一批 00 后已经 20 岁了,95 后也到了晚婚的年龄,员外的头发也越来越少了,新的一年大家有立下了哪些 Flag ?小伙伴们别急着立 Flag,让员外帮你分析一下哪些技术正 ...
- 不只是安装,Kolla 让 OpenStack 运维变简单
使用 kolla 部署的 OpenStack 环境和传统直接安装的环境相比较,因为使用了全容器化部署,基本操作上有很大不同.对于初学者,操作变得更清晰和更简单了,但是如果你已经有了一定的经验,可能反而 ...
- 《C++Primer》第五版习题答案--第三章【学习笔记】
[C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...
- 人群密度检测MCNN+CSRnet
MCNN(简单理解): 三列卷积神经网络,分别为大中小三种不同尺度的卷积核,表示为L列(使用大尺度卷积核: 9*9, 7*7, 7*7,7*7), M(使用中等尺度卷积核: 7*7, 5*5, 5*5 ...
- Go 每日一库之 go-homedir
简介 今天我们来看一个很小,很实用的库go-homedir.顾名思义,go-homedir用来获取用户的主目录. 实际上,使用标准库os/user我们也可以得到这个信息: package main i ...
- 基于 HTML5 + WebGL 的3D无人机 展示
前言 近年来,无人机的发展越发迅速,既可民用于航拍,又可军用于侦察,涉及行业广泛,也被称为“会飞的照相机”.但作为军事使用,无人机的各项性能要求更加严格.重要.本系统则是通过 Hightopo 的 ...
- 树上点分治 poj 1741
Give a tree with n vertices,each edge has a length(positive integer less than 1001). Define dist(u,v ...
- 让VS2019支持.NET Core WinForms和WPF设计器的临时办法(转)
.net core 3.0 Preview 6,vs2019 16.1.4 暂时还不支持Winform designer 解决方案: 将Form1修改为其他名字 WinForm 编辑项目文件 加 ...
- JDBC超时设置【转】
恰当的JDBC超时设置能够有效地减少服务失效的时间.本文将对数据库的各种超时设置及其设置方法做介绍. 真实案例:应用服务器在遭到DDos攻击后无法响应 在遭到DDos攻击后,整个服务都垮掉了.由于第四 ...