Python序列化模块JSON与Pickle


Posted in Python onJune 05, 2022

序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

一、JSON序列化

使用json序列化能够达到跨平台传输数据的目的。

跨平台性质,它可以序列化dict/list/str/int/float/bool/None数据类型。

序列化成json文本格式。

1、json数据类型和python数据类型对应关系表:

Json类型<——>Python类型

  • {}<——>dict
  • []<——>list, tuple
  • "string"<——>str, unicode
  • 520.13<——>int, long, float
  • true/false<——>True/False
  • null<——>None

2、相关函数

(2)序列化

  • 序列化成字符串:json.dumps(json_obj)
  • 序列化字符串到文件中:json.dump(json_obj, write_file, [,protocol])

(2)反序列化

  • 反序列化成对象:json.loads(json_str)
  • 从文件读流中反序列化成对象:json.load(read_file)

3、举例:

import json

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 
# 序列化
data = json.dumps(struct_data)
print(data, type(data))  # {"name": "json", "age": 23, "sex": "male"} 

# 反序列化
data = json.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'}

磁盘文件操作

import json

# 序列化,写入磁盘
with open('Json序列化对象.json', 'w') as fw:
    json.dump(struct_data, fw)

# 从文件读取,反序列化
with open('Json序列化对象.json') as fr:
    data = json.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

二、Pickle序列化

pickle无法跨平台,序列化之后只有python识别。但是可以序列化Python的任意数据类型,包括函数和对象。

Json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样。但是序列化成二进制形式。

1、举例:

import pickle

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 

data = pickle.dumps(struct_data)
print(data, type( data))  # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' 

data = pickle.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 'dict'>

# 序列化(注意:pickle模块需要使用二进制存储,即'wb'模式存储)
with open('Pickle序列化对象.pkl', 'wb') as fw:
    pickle.dump(struct_data, fw)

# 反序列化
with open('Pickle序列化对象.pkl', 'rb') as fr:
    pickle = pickle.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

2、base64与pickle联合使用

str = 'Hello World'  # 加密前,原始数据
a = base64.b64encode(pickle.dumps(str)).decode()  # 加密
print(a) # gANYCwAAAEhlbGxvIFdvcmxkcQAu
b = pickle.loads(base64.b64decode(a.encode()))  # 解密
print(b)

到此这篇关于Python序列化模块JSON与Pickle的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
浅谈Python的垃圾回收机制
Dec 17 Python
Python虚拟环境项目实例
Nov 20 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
在Python中使用defaultdict初始化字典以及应用方法
Oct 31 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
Django实现聊天机器人
May 31 Python
python对文档中元素删除,替换操作
Apr 02 Python
python 判断字符串当中是否包含字符(str.contain)
Python测试框架pytest高阶用法全面详解
Python使用Web框架Flask开发项目
Jun 01 #Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 #Python
 python中的元类metaclass详情
May 30 #Python
Python自动化实战之接口请求的实现
Python中的 enumerate和zip详情
May 30 #Python
You might like
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
PHP通过header实现文本文件下载的代码
2010/08/08 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
项目实践之javascript技巧
2007/12/06 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
详解各版本React路由的跳转的方法
2018/05/10 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python如何实现爬取B站视频
2020/05/20 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
个人生活学习自我评价范文
2013/11/26 职场文书
青年教师个人总结
2015/02/11 职场文书
立春观后感
2015/06/18 职场文书
歌咏比赛主持词
2015/06/29 职场文书
中学教师教学工作总结
2015/08/13 职场文书