Python实现数据的序列化操作详解


Posted in Python onJuly 07, 2022

​在日常开发中,对数据进行序列化和反序列化是常见的数据操作,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 pickle
data = ['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 模块的常用操作,对于实现数据的序列化和反序列化提供了支撑。

到此这篇关于Python实现数据的序列化操作详解的文章就介绍到这了,更多相关Python数据序列化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python进行AES加密和解密的示例代码
Feb 02 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
python生成1行四列全2矩阵的方法
Aug 04 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
Python元组知识点总结
Feb 18 Python
Python3最长回文子串算法示例
Mar 04 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python中@property的作用和getter setter的解释
Dec 22 Python
Python如何利用pandas读取csv数据并绘图
Python可视化神器pyecharts绘制水球图
Jul 07 #Python
python数字图像处理之图像自动阈值分割示例
Python 读取千万级数据自动写入 MySQL 数据库
Jun 28 #Python
python数字图像处理:图像简单滤波
Jun 28 #Python
python实现一个简单的贪吃蛇游戏附代码
python数字图像处理之对比度与亮度调整示例
Jun 28 #Python
You might like
ASP和PHP都是可以删除自身的
2007/04/09 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
php 基础函数
2017/02/10 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
Vuex 快速入门(简单易懂)
2018/09/20 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python机器学习之KNN分类算法
2018/08/29 Python
Python GUI库PyQt5图形和特效样式QSS介绍
2020/02/25 Python
Python中zip函数如何使用
2020/06/04 Python
英国现代市场:ARKET
2019/04/10 全球购物
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
教师学习培训邀请函
2014/02/04 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
领导班子对照检查材料
2014/09/22 职场文书
朋友离别感言
2015/08/04 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
2016年教师节感言
2015/12/09 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫