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中使用dom模块生成XML文件示例
Apr 05 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
Python中Subprocess的不同函数解析
Dec 10 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
python的Jenkins接口调用方式
May 12 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
Python私有属性私有方法应用实例解析
Sep 15 Python
Python中三种花式打印的示例详解
Mar 19 Python
python3 字符串str和bytes相互转换
Mar 23 Python
python处理json数据文件
Apr 11 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
php实现上传图片文件代码
2015/07/19 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
javascript 特殊字符串
2009/02/25 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
实战node静态文件服务器的示例代码
2018/03/08 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
[04:02]2014DOTA2国际邀请赛 BBC每日综述中国战队将再度登顶
2014/07/21 DOTA
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
Python实现查找系统盘中需要找的字符
2015/07/14 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python类的继承和多态代码详解
2017/12/27 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
Python读取stdin方法实例
2019/05/24 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
django 模型中的计算字段实例
2020/05/19 Python
Python如何读取、写入CSV数据
2020/07/28 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
股指期货心得体会
2014/09/10 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
四风批评与自我批评范文
2014/10/14 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
大学学生会辞职信
2015/05/13 职场文书
区域销售大会开幕词
2016/03/04 职场文书
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis