序列化及json&pickle的使用
一、序列化
序列化是指把内存里的数据类型转变成字符串。以使其能存储到硬盘或通过网络传输到远程。——硬盘或网络传输时只能接受bytes。
Python中用于序列化的两个模块:
- json:用于字符串和Python数据类型之间进行转换
- pickle:用于Python特有类型和Python数据类型间进行转换。
json和pickle模块都提供了四个功能:dumps、dump、loads、load
1、序列化
# 把内存数据转成字符,叫做序列化 data = { 'roles':[ {'role':'monster','type':'pig'}, {'role':'hero','type':'关羽'} ] } f = open("game_status","w") # f.write(data) # 写入失败,write只能接收字符串或者是bytes f.write(str(data)) # 内容写入文件中
2、反序列化
# 把字符转成内存数据类型,叫做反序列化 f = open("game_status","r") d = f.read() d = eval(d) print(d['roles'])
二、json模块
把数据类型转成字符串存到内存里的意义:
1、把你的内存数据通过网络共享给远程其他人
2、定义了不同语言之间的交互规则
纯文本:不能共享复杂的数据类型
xml:占空间大
json:相对来说,简单且可读性好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import json data = { 'roles' :[ { 'role' : 'monster' , 'type' : 'pig' }, { 'role' : 'hero' , 'type' : '关羽' } ] } d = json.dumps(data) # 仅转为字符串,可以存入硬盘 print (d, type (d)) """ 输出:{"roles": [{"role": "monster", "type": "pig"}, {"role": "hero", "type": "\u5173\u7fbd"}]} <class 'str'> """ f = open ( "test.json" , "w" ) # 创建文件对象 d1 = json.dump(data,f) # dump不仅将数据变为字符串还直接写入文件,但是只能存入文件对象中 d2 = json.loads(d) # 仅把字符串转为相应的数据类型 print (d2[ 'roles' ], type (d2)) """ 输出:[{'role': 'monster', 'type': 'pig'}, {'role': 'hero', 'type': '关羽'}] <class 'dict'> """ # 从文件中读入: f = open ( "test.json" , "r" ) data = json.load(f) print (data[ 'roles' ]) |
三、pickle模块
import pickle d = {'name':'alex','age':22} l = [1,2,3,4,'rain'] pk = open("data.pkl","wb") # 针对bytes内容必须配置为wb模式 print(pickle.dumps(d)) # b'\x80\x03}q\x00(X\x04\x00\x.... bytes类型 pickle.dump(d,pk) """ data.pkl文件内容:�}q(XnameqXalexqXageqKu. 文件格式不可直接读。 """ f = open("data.pkl","rb") d = pickle.load(f) print(d) """ 输出:{'name': 'alex', 'age': 22} """ def sayhi(): print('dddddd') pickle.dumps(sayhi) """ 执行不报错,说明pickle可以支持函数序列化 """
四、json&pickle对比
json:
优点:跨语言、体积小
缺点:只能支持int\str\list\tuple\dict
pickle:
优点:专为Python设计,支持Python所有的数据类型。
缺点:只能在Python中使用,存储数据占空间大。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术