python序列化对象中的对象_python序列化对象和反序列化

1.首先不管哪种语言都会用到序列化和反序列化的过程,

2.序列化:把对象转换为字节序列的过程称为对象的序列化;   反序列化:把对象转换为字节序列的过程称为对象的序列化。

3.序列化的作用:把对象(变量)从内存中变成可存储或传输的二进制对象,序列化之后的内容就可以写入磁盘,或者通过网络传输到别的机器上,同理,反序列化实现,把变量内容从序列化的对象重新读取到内存

4.如何实现序列化?比如我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,例如xml,json。

json是标准的JavaScript语言的对象,其实就是字符串,可以被所有语言读取,也可以方便的存储到磁盘或者网络传输。

5.JSON和Python的关系?两者内置的数据类型对应关系如下

6.在python中json只能转换一部分对象。类,函数无法转换,就要用到pickle,但pickle只适用在python内部适用,shelve模块也是python内部使用

举例说明

1.想要把一个列表写进文件

importjson

mq=[1,'e','r','m',4]

with open('json_te','w') as fm:

json.dump(mq,fm)

如下,不调用dumps序列化,则直接报错,write()的参数必须是str类型

importjson

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

修改以上代码:执行成功

importjson

mq=[1,'e','r','m',4]

mq=json.dumps(mq)

with open('json_te','w') as fm:

fm.write(mq)

2.以上代码还可以用dump替代,体现了dump和dumps之间的区别

importjson

mq=[1,'e','r','m',4]

with open('json_te','w') as fm:

json.dump(mq,fm)

3.对于从文件中读取该列表就体现了,反序列化的过程,如下过程,直接读取出来的是str,程序把文件内容作为一个长的字符串

importjson

with open ('json_te','r') as fn:

con=fn.read()print(type(con)) #print(con[2]) #'

4.以下对比,反序列化处理的结果

importjson

with open ('json_te','r') as fn:

con=fn.read()

con=json.loads(con)print(type(con)) #

print(con[2]) #r

5.反序列化的另一种表达方式

importjson

with open ('json_te','r') as fn:

con=json.load(fn)print(type(con)) #

6.json的dumps和loads,不能处理像函数/类,这就需要用到pickle

importjsondefaddmd(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实现

importpickledefaddmd():return 1+1addmd=pickle.dumps(addmd)

with open('pick_te','wb') as fa:

fa.write(addmd

7.还有一个shelve模块,只有包含一个open函数,返回像字典一样的对象,直接实现文件中内容的修改添加,比JSON方便但是其他语言不通用。

importshelve

md=shelve.open('dict_t')

md['name']='xiaohong'

print(md['name']) #xiaohong

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值