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序列化对象和反序列化的更多相关文章

  1. redis整合Spring之序列化对象与反序列化

    写在最前面 1.Spring必须是4.2.6及以上版本才支持redis 2.jar包版本建议统一 需要准备jar包 1.aopalliance-1.0.jar 2.spring-data-common ...

  2. JAXB序列化对象与反序列化XML

    1.什么是JAXB JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术. 该过程中,JAXB也提供 ...

  3. Python序列化和反序列化

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

  4. python序列化与反序列化(json与pickle)

    在python中,序列化可以理解为将python中对象的编码格式转换为json(pickle)格式的字符串,而反序列化可以 理解为将json(pickle)格式的字符串转换为python中对象的编码格 ...

  5. python pickle模块的使用/将python数据对象序列化保存到文件中

    # Python 使用pickle/cPickle模块进行数据的序列化 """Python序列化的概念很简单.内存里面有一个数据结构, 你希望将它保存下来,重用,或者发送 ...

  6. Python 序列化与反序列化

    序列化是为了将内存中的字典.列表.集合以及各种对象,保存到一个文件中(字节流).而反序列化是将字节流转化回原始的对象的一个过程. json库 序列化:json.dumps() 反序列化:json.lo ...

  7. python序列化与反序列化(json、pickle)-(五)

    1.什么是序列化&反序列化? 序列化:将字典.列表.类的实例对象等内容转换成一个字符串的过程. 反序列化:将一个字符串转换成字典.列表.类的实例对象等内容的过程 PS:Python中常见的数据 ...

  8. Java 序列化 对象序列化和反序列化

    Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...

  9. ObjectOutputStream:对象的序列化流 ObjectInputStream:对象的反序列化流

    package com.itheima.demo04.ObjectStream; import java.io.FileOutputStream; import java.io.IOException ...

随机推荐

  1. 「Luogu P2015」二叉苹果树 解题报告

    题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...

  2. 「Luogu P3866」[TJOI2009]战争游戏 解题报告

    题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...

  3. Windows和Linux下与VMware虚拟机通过内网IP通讯

    首先分两种情况:一种是你的电脑已经在一个内网的环境下且有额外的内网IP地址,和另一种只是想给自己电脑上的虚拟机分配个内网IP来通讯. ①有可用的内网IP 找到一个空闲的IP地址(这里以192.168. ...

  4. SpringBoot基础架构篇3(Redis)

    show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 数据库达到瓶颈,有什么解决方法. Redis 可以很好解决这个问 ...

  5. 实现github的自动钩子

    实现github的自动钩子 最近在学习go,也写了一些玩具放到自己的服务器中,但是感觉每次写完在本地交叉编译后上传到服务器略显麻烦,上传代码到服务器中编译也是略显麻烦,把编译文件加入到git管理中会导 ...

  6. 【一起学源码-微服务】Feign 源码三:Feign结合Ribbon实现负载均衡的原理分析

    前言 前情回顾 上一讲我们已经知道了Feign的工作原理其实是在项目启动的时候,通过JDK动态代理为每个FeignClinent生成一个动态代理. 动态代理的数据结构是:ReflectiveFeign ...

  7. Java StringBuilder类

    StringBuilder的原理 String类 字符串是常量,它们的值在创建之后不能更改 字符串的底层是一个被final修饰的数组,不能改变 private final byte[] value; ...

  8. python可变对象

    - 每个对象中都保存了三个数据: id(标识) type(类型) value(值) - 列表就是一个可变对象 a = [1,2,3] - a[0] = 10 (改对象) - 这个操作是在通过变量去修改 ...

  9. 【C_Language】---一份程序看懂C程序printf()的几种常用用法

    闲来继续巩固我的学习之路,今天略微整理了一下,C程序中Printf()的一些常用用法,虽然自己以前好像会,但是不够系统,今天大致整理了一些,先贴上来看看,以后在看到其他,继续补充,希望能帮到一些像我一 ...

  10. Jenkins配置邮件发送测试报告

    前言 在之前的文章(Jenkins自动执行python脚本输出测试报告)中,我们已成功实现利用Jenkins自动执行python脚本,输出并可直接在界面上查看测试报告,这里我们还差最后一步,我们需要将 ...