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实现 多进程导入CSV数据到 MySQL
Feb 26 Python
python difflib模块示例讲解
Sep 13 Python
详解Python核心对象类型字符串
Feb 11 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
python实现linux下抓包并存库功能
Jul 18 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
Python requests设置代理的方法步骤
Feb 23 Python
python实现登录与注册系统
Nov 30 Python
分享Python获取本机IP地址的几种方法
Mar 17 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
基于php编程规范(详解)
2017/08/17 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
js序列化和反序列化的使用讲解
2019/01/19 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
Python字典操作简明总结
2015/04/13 Python
Python栈类实例分析
2015/06/15 Python
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
党员年终民主评议的自我评价
2013/11/05 职场文书
劳资员岗位职责
2013/11/11 职场文书
化学专业毕业生自荐信
2013/11/15 职场文书
高二生物教学反思
2014/01/27 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
校本课程教学计划
2015/01/19 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书