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编程中字符串和列表的基本知识讲解
Oct 14 Python
Python守护线程用法实例
Jun 23 Python
详解 Python 读写XML文件的实例
Aug 02 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
python利用小波分析进行特征提取的实例
Jan 09 Python
python删除文件夹下相同文件和无法打开的图片
Jul 16 Python
python 字符串追加实例
Jul 20 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
python 实现aes256加密
Nov 27 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中将数组转成XML格式的实现代码
2011/08/08 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
2012/07/25 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
JS表单验证的代码(常用)
2016/04/08 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
python从sqlite读取并显示数据的方法
2015/05/08 Python
详解Python中for循环的使用方法
2015/05/14 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
MyHeritage美国:家族史研究和DNA测试的领先服务
2019/05/27 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
机关作风建设心得体会
2014/10/22 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers