python 序列化_Python 序列化

一、序列化介绍

在程序的运行过程中,我们定义的变量都是存放在内存中的,如 name = "Tom" ,我们也可以随时修改变量,如 name = "John",

但是一旦程序运行结束,变量所占用的内存就被系统回收,也就是变量被销毁了,下次重新运行程序时,变量又被初始化为 name = "Tom"

因此,有没有什么办法能把修改后的变量保存下来呢?或者说把存放在内存中的变量存放到磁盘中,实现永久保存,这就需要用到序列化

什么是序列化:把内存中的对象(变量也是一个对象)持久保存到磁盘中的过程就是序列化,一般我们以文件的形式保存到磁盘中

什么是反序列化:将文件中的数据重新解析为一个Python对象,然后保存到内存中的过程,就是反序列化

序列化应用在哪里呢?比如我们在玩仙剑奇侠传这个单机游戏时,游戏是需要运行在内存中的,然后我们进行存档,存档的过程就是序列化,

会把在内存中的游戏数据保存成一个磁盘文件,下次我们读取存档的时候,就会读取这个文件,把磁盘文件反序列化到内存中,继续游戏进度。

实现序列化的模块:

模块名

描述

提供的API

pickle

用于实现将 Python 对象转换成特定的二进制,然后持久化保存到磁盘文件中

dump() 、load()

dumps() 、loads()

json

用于实现将 Python 对象转换成 json 字符串,然后持久化保存到磁盘文件中

dump() 、load()

dumps() 、loads()

shelve

用于实现将 Python 对象转换成类似字典的对象,然后持久化保存到磁盘文件中

open()

二、pickle 模块

pickle.dump(obj,file) :用于将一个对象序列化到磁盘文件中

pickle.load(file) :用于将磁盘文件中的数据反序列化到内存中,结果返回一个对象,需要用一个变量来接收

pickle.dumps(obj) :用于将一个对象序列化成一个字符串,并不保存到磁盘文件中,结果返回一个字符串对象,需要用变量来接收

pickle.loads() :用于将字符串反序列化成 python 对象

In [1]: importpickle

In [2]: data = {'name': 'Tom', 'age': 22} #先定义一个对象

In [3]: with open('1.pickle', 'wb') as fd: #序列化,因为是转换成二进制数据,所以要以'wb'方式写入文件

...: pickle.dump(data, fd)

...:

In [4]: with open('1.pickle', 'rb') as fd: #反序列化,同理要以'rb'方式读取文件

...: data2 =pickle.load(fd)

...:

In [5]: data2

Out[5]: {'age': 22, 'name': 'Tom'}

In [1]: importpickle

In [2]: data = {'name': 'Tom', 'age': 22}

In [3]: data2 =pickle.dumps(data) # 序列化

In [4]: type(data2) # 结果是一个字符串

Out[4]: str

In [5]: pickle.loads(data2) # 反序列化

Out[5]: {'age': 22, 'name': 'Tom'}

三、json 模块

pickle模块是用 python 写的,只适用于 python 语言,而 json 模块是跨语言的,可以使用 json 与其他语言进行数据交互

json.dump(obj,file) :用于将一个对象序列化到磁盘文件中

json.load(file) :用于将磁盘文件中的数据反序列化到内存中,结果返回一个对象,需要用一个变量来接收

json.dumps(obj) :用于将一个对象序列化成一个字符串,并不保存到磁盘文件中,结果返回一个字符串对象,需要用变量来接收

json.loads() :用于将字符串反序列化成 python 对象

In [1]: importjson

In [2]: data = {'name': 'Tom', 'age': 22}In [3]: with open('1.json', 'w') as fd: # 序列化

...: json.dump(data, fd)

...:

In [4]: with open('1.json', 'r') as fd: # 反序列化

...: data2=json.load(fd)

...:

In [5]: data2

Out[5]: {u'age': 22, u'name': u'Tom'}

In [1]: importjson

In [2]: data = {'name': 'Tom', 'age': 22}

In [3]: data2 =json.dumps(data) # 序列化

In [4]: type(data2)

Out[4]: str

In [5]: json.loads(data2) # 反序列化

Out[5]: {u'age': 22, u'name': u'Tom'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值