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中Django 后台自定义表单控件
Mar 28 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
python正则-re的用法详解
Jul 28 Python
Python中输入和输出(打印)数据实例方法
Oct 13 Python
如何基于Python创建目录文件夹
Dec 31 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
python中翻译功能translate模块实现方法
Dec 17 Python
Python竟然能剪辑视频
May 25 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
子页向父页传值示例
2013/11/27 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
详解vue 图片上传功能
2019/04/30 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
Python变量访问权限控制详解
2019/06/29 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
日本著名的服饰鞋帽综合类购物网站:MAGASEEK
2019/01/09 全球购物
《我要的是葫芦》教学反思
2014/02/23 职场文书
开学典礼主持词
2014/03/19 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
食品质检员岗位职责
2015/04/08 职场文书
放牛班的春天观后感
2015/06/01 职场文书
政审证明范文
2015/06/19 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
MySQL中正则表达式(REGEXP)使用详解
2022/07/07 MySQL