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编码总结(编码类型、格式、转码)
Jul 01 Python
Mac安装python3的方法步骤
Aug 09 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
Django框架表单操作实例分析
Nov 04 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
opencv python图像梯度实例详解
Feb 04 Python
django从后台返回html代码的实例
Mar 11 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
python3的pip路径在哪
Jun 23 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 Python
关于python中remove的一些坑小结
Jan 04 Python
python双向链表实例详解
May 25 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
php中++i 与 i++ 的区别
2012/08/08 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php实用代码片段整理
2016/11/12 PHP
PHP4和PHP5版本下解析XML文档的操作方法实例分析
2017/05/20 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
Python魔术方法专题
2020/06/19 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
学生干部的自我评价分享
2014/01/18 职场文书
实习生工作证明范本
2014/09/14 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
应收账款管理制度
2015/08/06 职场文书
食品安全主题班会
2015/08/13 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript