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快速排序代码实例
Nov 21 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python正则表达式使用经典实例
Jun 21 Python
python正则分析nginx的访问日志
Jan 17 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
python实现知乎高颜值图片爬取
Aug 12 Python
Python的bit_length函数来二进制的位数方法
Aug 27 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
python中def是做什么的
Jun 10 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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
3
2006/10/09 PHP
在apache下限制每个虚拟主机的并发数!!!!
2006/10/09 PHP
深入解析php之apc
2013/05/15 PHP
PHP精确计算功能示例
2016/11/29 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
javascript 动态创建表格
2015/01/08 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
深入学习JavaScript 高阶函数
2019/06/11 Javascript
js如何获取访问IP、地区、当前操作浏览器
2019/07/23 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
Web服务器框架 Tornado简介
2014/07/16 Python
Python实现文件复制删除
2016/04/19 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python 实现aes256加密
2020/11/27 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
生产总经理岗位职责
2013/12/19 职场文书
结婚喜宴主持词
2014/03/14 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
教师节联欢会主持词
2015/07/04 职场文书