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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
Dec 04 Python
如何利用pygame实现简单的五子棋游戏
Dec 29 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 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 操作文件的一些FAQ总结
2009/02/12 PHP
学习php中的正则表达式
2014/08/17 PHP
php实现文件预览功能
2017/05/23 PHP
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
js中的闭包学习心得
2018/02/06 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
express 项目分层实践详解
2018/12/10 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
Python中使用HTMLParser解析html实例
2015/02/08 Python
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python类装饰器用法实例
2015/06/04 Python
python实现多线程的两种方式
2016/05/22 Python
python入门教程 python入门神图一张
2018/03/05 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
自学python的建议和周期预算
2019/01/30 Python
Python Django view 两种return的实现方式
2020/03/16 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
工程专业求职自荐书范文
2014/02/08 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
好好学习保证书
2015/02/26 职场文书
中学生自我评价2015
2015/03/03 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android