python的序列化是什么意思_Python序列化

#最近在根据廖雪峰老师的python教程学习,以下是学习过程中做的一些笔记。

序列化

之前有讲过php序列化和反序列化,,相信大家对序列化有一些的了解,在程序运行过程中所有的变量都是在内存中的,当程序运行完毕,所有的内存都会被系统收回,我们把变量从内存中变成可存储或传输的过程称为序列化。在python中叫pickling。

序列化之后,就可以把序列化之后的内容写入磁盘,进行保存出传输等。,反过来把变量内容从序列化的对象重新读取到内存中称为反序列化,即unpickling。python提供了pickle模块来实现序列化。

>>>import pickle>>>d = dict(name='Bob',age=20,score=89)>>>pickle.dumps(d)

b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00bobq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x05\x00\x00\x00scoreq\x04KYu.'

pickle.dumps()方法将对象转为bytes格式,就可以把这个bytes写入文件;或者利用另一种方法pickle.dump(),直接将对象写入file-like object:

>>>f = open('dump.txt','wb')>>>pickle.dump(d,f)>>>f.close()

这个时候再看所在目录产生一个dump.txt的文档。

当我们需要读取内容的时候可以利用pickle.load()方法将对象读出,也可以利用pickle.loads()将对象反序列化出:

>>> f = open('dump.txt', 'rb')>>> d =pickle.load(f)>>>f.close()>>>d

{'age': 20, 'score': 89, 'name': 'Bob'}

变量的内容就又读出来了。

JSON格式

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但是json是更好的方法,json格式转化为一个字符串可以被所有语言所读取,也可以进行存储和传输。

python内置json格式模块提供了非常完善的格式转换。

>>>import json>>> d = dict(name='Bob', age=20, score=88)>>>json.dumps(d)      #返回一个字符串'{"age": 20, "score": 88, "name": "Bob"}'

dumps()方法返回一个str(),内容就是标准的JSON,dump()方法可以直接啊JSON写入一个文件。

要把JSON反序列化为python格式对象,用loads()或者对应的load()方法;前者把JSON的字符串反序列化,后者从file-like Object中读取字符串并反序列化:

>>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'

>>>json.loads(json_str)

{'age': 20, 'score': 88, 'name': 'Bob'}

注:由于JSON标准规定JSON编码是UTF-8,所以我们总是能正确地在Python的str与JSON的字符串之间转换。

不过更多时候我们习惯用一个类:

class Student(object):

def __init__(self,name,age,score):

self.name=name

self.score=score

self.age=age

s= Student('bob',20,88)

print(json.dump(s))

我们直接打印以上代码,发现居然报错,因为默认情况下,dumps()方法不知道如何将Student实例变为一个JSON的{}对象;所以我们需要将目标转为一个dict对象:

def student2dict(std):return{'name':std.name,'age':std.age,'score':std.score

}

我们添加以上代码再进行打印:

>>> print(json.dumps(s, default=student2dict))

{"age": 20, "name": "Bob", "score": 88}

这次顺利转为JSON.。也可以直接调用__dict__属性:

>>>print(json.dumps(s.__dict__))

{"age": 20, "name": "Bob", "score": 88}

总结

序列化模块中,pickle.dumps()方法将对象转为bytes格式;pickle.dump()将对象序列化进文件中;pickle.load()将目标反序列化为对象;

JSON格式中,json.dumps()方法返回一个str;json.loads()方法返回字典。

如有不足或错误之处请评论指出,如果觉得有用的话,可以右侧请作者喝茶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值