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数组条件过滤filter函数使用示例
Jul 22 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python 如何批量更新已安装的库
May 26 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
关于python中remove的一些坑小结
Jan 04 Python
python 如何执行控制台命令与操作剪切板
May 20 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
php5新改动之短标记启用方法
2008/09/11 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
php获取根域名方法汇总
2014/10/28 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
php绘制一条直线的方法
2015/01/24 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
Python的Django框架中的数据库配置指南
2015/07/17 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
parser.add_argument中的action使用
2020/04/20 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
给学校的建议书范文
2014/05/15 职场文书
三行辞职书范文
2015/02/26 职场文书
办公室个人总结
2015/02/28 职场文书
教师教育教学随笔
2015/08/15 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android