Python jsonpickle

news/2025/3/12 17:02:10/

在日常开发中,对数据进行序列化和反序列化是常见的数据操作,Python提供了两个模块方便开发者实现数据的序列化操作,即 json 模块和 pickle 模块。这两个模块主要区别如下:

  • json 是一个文本序列化格式,而 pickle 是一个二进制序列化格式;

  • json 是我们可以直观阅读的,而 pickle 不可以;

  • json 是可互操作的,在 Python 系统之外广泛使用,而 pickle 则是 Python 专用的;

  • 默认情况下,json 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型。

Json 模块

Json 是一种轻量级的数据交换格式,由于其具有传输数据量小、数据格式易解析等特点,它被广泛应用于各系统之间的交互操作,作为一种数据格式传递数据。它包含多个常用函数,具体如下:

dumps()函数

dumps()函数可以将 Python 对象编码成 Json 字符串。例如:

#字典转成json字符串 加上ensure_ascii=False以后,可以识别中文, indent=4是间隔4个空格显示
import json         d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}print(json.dumps(d,ensure_ascii=False,indent=4))
#执行结果:{    "小明": {        "sex": "男",        "addr": "上海",        "age": 26    },    "小红": {        "sex": "女",        "addr": "上海",        "age": 24    }}

dump()函数

dump()函数可以将 Python对象编码成 json 字符串,并自动写入到文件中,不需要再单独写文件。例如:​​​​​​​

#字典转成json字符串,不需要写文件,自动转成的json字符串写入到‘users.json’的文件中 import json                                                                         d={'小明':{'sex':'男','addr':'上海','age':26},'小红':{ 'sex':'女','addr':'上海', 'age':24},}#打开一个名字为‘users.json’的空文件fw =open('users.json','w',encoding='utf-8')
json.dump(d,fw,ensure_ascii=False,indent=4)

loads()函数

loads()函数可以将 json 字符串转换成 Python 的数据类型。例如:​​​​​​​

#这是users.json文件中的内容{    "小明":{        "sex":"男",        "addr":"上海",        "age":26    },    "小红":{        "sex":"女",        "addr":"上海",        "age":24    }}
#!/usr/bin/python3#把json串变成python的数据类型   import json  #打开‘users.json’的json文件f =open('users.json','r',encoding='utf-8')#读文件res=f.read()print(json.loads(res))
#执行结果:{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

load()函数

load()loads()功能相似,load()函数可以将 json 字符串转换成 Python 数据类型,不同的是前者的参数是一个文件对象,不需要再单独读此文件。例如:​​​​​​​

#把json串变成python的数据类型:字典,传一个文件对象,不需要再单独读文件 import json   #打开文件f =open('users.json','r',encoding='utf-8') print(json.load(f))
#执行结果:{'小明': {'sex': '男', 'addr': '上海', 'age': 26}, '小红': {'sex': '女', 'addr': '上海', 'age': 24}}

Pickle 模块

Pickle 模块与 Json 模块功能相似,也包含四个函数,即 dump()、dumps()、loads() 和 load(),它们的主要区别如下:

  • dumps 和 dump 的区别在于前者是将对象序列化,而后者是将对象序列化并保存到文件中。

  • loads 和 load 的区别在于前者是将序列化的字符串反序列化,而后者是将序列化的字符串从文件读取并反序列化。

dumps()函数

dumps()函数可以将数据通过特殊的形式转换为只有python语言认识的字符串,例如:​​​​​​​

import pickle# dumps功能import pickledata = ['A', 'B', 'C','D']  print(pickle.dumps(data))
b'\x80\x03]q\x00(X\x01\x00\x00\x00Aq\x01X\x01\x00\x00\x00Bq\x02X\x01\x00\x00\x00Cq\x03X\x01\x00\x00\x00Dq\x04e.'

dump()函数

dump()函数可以将数据通过特殊的形式转换为只有python语言认识的字符串,并写入文件。例如:​​​​​​​

# dump功能with open('test.txt', 'wb') as f:    pickle.dump(data, f)print('写入成功')
写入成功

loads()函数

loads()函数可以将pickle数据转换为python的数据结构。例如:​​​​​​​

# loads功能msg = pickle.loads(datastr)print(msg)
['A', 'B', 'C', 'D']

load()函数

load()函数可以从数据文件中读取数据,并转换为python的数据结构。例如:​​​​​​​

# load功能with open('test.txt', 'rb') as f:   data = pickle.load(f)print(data)
['A', 'B', 'C', 'D']

总结

本节给大家介绍 Python 中 json&pickle 模块的常用操作,对于实现数据的序列化和反序列化提供了支撑。


http://www.ppmy.cn/news/85320.html

相关文章

Linux Kernel源码阅读: x86-64 系统调用实现细节(超详细)

0、前言 本文采用Linux 内核 v3.10 版本 本文不涉及调试、跟踪及异常处理的细节 一、系统调用简介 系统调用是用户空间程序与内核交互的主要机制。系统调用与普通函数调用不同,因为它调用的是内核里的代码。使用系统调用时,需要特殊指令以使处理器权限转…

对封装好的Vue组件库进行打包,并发布到npm上

1. 新建vue 项目 并且在根目录创建两个文件夹 packages和examples。 packages:用于存放所有的组件 examples:用于进行测试组件,把src改为examples 2.配置vue.config.js 并设置入口文件 如果没有vue.config.js文件 就需要在项目根目录下创…

Self-Supervised GANs via Auxiliary Rotation Loss

条件GAN处于自然图像合成的前沿。这种模型的主要缺点是需要标记数据。在这项工作中,我们利用了两种流行的无监督学习技术,对抗训练和自监督,并朝着弥合有条件和无条件GANs之间的差距迈出了一步。自监督的作用是鼓励判别器学习到在训练中不会忘…

Vue3 整合vuex

Vue3 整合vuex Vuex 4 引入了一个新的 API 用于在组合式 API 中与 store 进行交互。可以在组件的 setup 钩子函数中使用 useStore 组合式函数来检索 store 1.准备工作 1.1 安装 vue 3安装 vuex4 npm install vuex4 --S 1.2 配置 配置index.js 使用**createStore**创建 impor…

设计模式之【中介者模式】,多对多关系降级为一对多关系的利器

文章目录 一、什么是中介者模式1、中介者模式的优势2、中介者模式的缺点3、中介者模式的应用场景4、中介者模式的四大角色5、观察者模式和中介模式的区别 二、实例1、中介者模式的一般写法2、租房中介案例3、智能家具案例 三、源码中的中介者模式1、Timer 一、什么是中介者模式…

【Servlet API详解】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. HttpServlet类 2. HttpServletRequest 2.…

mysql 触发器检查字段

触发器语法 create trigger (名字) [before|after] [insert|update|delete] on (表名) for each row begin (内容) end处理时间,写入数据之前 before,写入数据之后 after操作动作,insert 插入,update 更新, delete 删…

使用马哈鱼SQLFlow分析聚合函数中的数据流列

聚合函数通常将列作为参数,在本文中,我们将讨论在用作函数参数的列和聚合函数之间创建什么样的数据流。 1. COUNT() COUNT()可以采用COUNT(),也可以采用任何列名,甚至可以采用空参数。如果参数为空或为列,则参数和函…