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翻译软件实现代码(使用google api完成)
Nov 26 Python
使用Python脚本操作MongoDB的教程
Apr 16 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
Python进程间通信Queue实例解析
Jan 25 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
Django migrations 默认目录修改的方法教程
Sep 28 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
详解python 降级到3.6终极解决方案
Feb 06 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
django中related_name的用法说明
May 20 Python
Python3.9新特性详解
Oct 10 Python
Python3 用什么IDE开发工具比较好
Nov 28 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中文汉字验证码
2007/04/08 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
php树型类实例
2014/12/05 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
Javascript下的keyCode键码值表
2007/04/10 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
javascript History对象原理解析
2020/02/17 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
深入理解Python中的*重复运算符
2017/10/28 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
Python request操作步骤及代码实例
2020/04/13 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
护理学专业求职信
2014/06/29 职场文书
财产保全担保书
2015/01/20 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
义诊活动通知
2015/04/24 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
mysql知识点整理
2021/04/05 MySQL