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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
python实践项目之监控当前联网状态详情
May 23 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
Python协程 yield与协程greenlet简单用法示例
Nov 22 Python
python实现人脸签到系统
Apr 13 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Python数据分析之pandas函数详解
Apr 21 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
?生?D片??C字串
2006/12/06 PHP
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
php XPath对XML文件查找及修改实现代码
2011/07/27 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
python更新列表的方法
2015/07/28 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
园长自我鉴定
2013/10/06 职场文书
迟到检讨书5000字
2014/01/31 职场文书
教学质量评估实施方案
2014/03/17 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
影视后期实训报告
2014/11/05 职场文书
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js