关于python的对象序列化介绍
作者:大家好,我今天叫傻瓜 时间:2023-07-27 05:02:31
对象:是抽象的概念 如列表 元组 字典 集合 皆为对象
序列化:一种方法。目的:把对象存储在磁盘上(即,将对象转换为字节数据/字符数据)。
这一过程我们借助序列化这一方法实现。
为什么需要序列化和反序列化这一操作呢?
1.便于存储。序列化过程将文本信息转变为二进制数据流。信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据。在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。
2.便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把這个对象转换为字节序列,在能在网络上传输;接收方则需要把字节序列在恢复为对象。
两个模块实现序列化
1.pickle模块
pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
pickle模块中的四个方法:dumps dump loads load
#dumps将对象序列化为字节数据
>>> import pickle
>>> ls = [1,2,3]
>>> data = pickle.dumps(ls)
>>> data
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f=open("a.txt",mode="wb")
>>> f.write(data)
22
>>> f.close()
>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03e.'
>>> f.close()
#dump将对象序列化为字节数据并且保存到file文件中
>>> ls=[2,3,4]
>>> pickle.dump(ls,open("a.txt",mode="wb"))
>>> f=open("a.txt",mode="rb")
>>> f.read()
b'\x80\x04\x95\x0b\x00\x00\x00\x00\x00\x00\x00]\x94(K\x02K\x03K\x04e.'
#loads将字节数据反序列化为对象
>>> f =open("a.txt","rb")
>>> show = f.read()
>>> show
b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\x01K\x02K\x03K\x04K\x05e.'
>>> show=pickle.loads(show)
>>> show
[1, 2, 3, 4, 5]
>>> f.close()
#load将file中的字节数据反序列化为对象
>>> pickle.load(open("a.txt","rb"))
[1, 2, 3, 4, 5]
2.json模块
json模块是将对象序列化为字符数据,json模块一样有dumps dump loads load方法,注意:json模块一般是用来序列化字典对象
#dumps方法
>>> import json
>>> d={"usename":"zhangsan","age":17}
>>> json.dumps(d)
'{"usename": "zhangsan", "age": 17}'
>>> s=json.dumps(d)
>>> f=open("a.txt","wt")
>>> f.write(s)
34
>>> f.close()
#loads方法
>>> f=open("a.txt","rt")
>>> ss = f.read()
>>> ss
'{"usename": "zhangsan", "age": 17}'
>>> json.loads(ss)
{'usename': 'zhangsan', 'age': 17}
>>> dd = json.loads(ss)
>>> dd
{'usename': 'zhangsan', 'age': 17}
>>> f.close()
来源:https://blog.csdn.net/weixin_55739782/article/details/122589142
标签:python,对象,序列化
0
投稿
猜你喜欢
HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解
2024-04-22 22:25:25
pytorch中tensor的合并与截取方法
2022-02-11 14:16:58
SQL 2008邮件故障排除:发送测试电子邮件
2008-12-02 14:28:00
三种Golang数组拷贝方式及性能分析详解
2023-07-13 07:54:27
Python socket聊天脚本代码实例
2023-02-02 21:33:16
python人工智能深度学习算法优化
2023-04-21 15:46:40
pycharm无法导入lxml的解决办法
2023-08-24 04:34:39
python的sorted函数及使用解析
2022-03-02 05:52:21
PHP中number_format()函数的用法讲解
2023-06-02 15:48:12
python读写删除复制文件操作方法详细实例总结
2022-07-29 05:58:56
Python双端队列deque的实现
2022-07-07 02:37:29
您需要了解的DIV+CSS网页布局的8条面试题目
2010-01-29 13:22:00
python3实现网页版raspberry pi(树莓派)小车控制
2021-05-05 05:35:18
Python3里的super()和__class__使用介绍
2022-06-27 09:29:35
Python数据可视化之简单折线图的绘制
2021-05-25 11:59:30
MySQL数据库完全卸载的方法
2024-01-28 05:59:21
在Oracle 8x实现自动断开后再连接
2010-07-26 13:03:00
基于webpack.config.js 参数详解
2024-05-02 16:28:30
在ASP中使用SQL语句之9:表单操作
2007-08-11 13:18:00
Python可视化神器pyecharts绘制折线图详情
2023-01-09 13:57:07