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 相关文章推荐
pyqt4教程之widget使用示例分享
Mar 07 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
python数据结构之图的实现方法
Jul 08 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
python语言中with as的用法使用详解
Feb 23 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Django框架安装方法图文详解
Nov 04 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 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 FPDF类库应用实现代码
2009/03/20 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
python的concat等多种用法详解
2018/11/28 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
临床医学大学生求职信
2013/09/28 职场文书
初中三好学生事迹材料
2014/01/13 职场文书
自荐信格式简述
2014/01/25 职场文书
公司门卫工作职责
2014/06/28 职场文书
自我查摆剖析材料
2014/10/11 职场文书
2014年防汛工作总结
2014/12/08 职场文书
先进党员事迹材料
2014/12/24 职场文书
会议开幕词
2015/01/28 职场文书
基层党支部承诺书
2015/04/30 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript